值类型中的新运算符遗漏

时间:2011-09-18 14:52:11

标签: c# .net

为什么我们不将new运算符用于值类型而不是其余用于对象构造?

2 个答案:

答案 0 :(得分:5)

您可以将new与值类型一起使用,但intfloatbool等原始值类型通常没有除默认构造函数之外的任何内容为您提供给定值类型的默认值,因此在分配实际值(从方法调用获得或通过硬编码文字值)之前,没有必要这样做。这就是您很少看到具有原始值类型的new的原因。

Rect这样的结构具有带参数的构造函数,您可以使用new在初始化时调用这些参数,就像初始化引用类型一样:

var rect = new Rect(100, 100, 450, 240);

结构类似于类,唯一(和关键)区别在于它们实际上是值类型。实际上,intfloatbool都是分别与System.Int32System.SingleSystem.Boolean结构相对应的关键字。

答案 1 :(得分:3)

目前尚不清楚你的意思。对于引用类型和值类型,要将变量初始化为某些内容,您必须指定一个值。该值可能来自:

  • 属性
  • 方法调用
  • default(...)运算符
  • typeof(...)运算符
  • 构造函数调用
  • 另一个变量
  • 方法组转换
  • 字面意思
  • 运营商的结果(例如加法)

所有都适用于引用类型和值类型(typeof(...)和方法组转换除外),因为它们都是引用类型值。

例如:

// Assignment from a string literal - string is a reference type
string x = "hello";

// Assignment from the result of a constructor call - DateTime is a value type
DateTime dt = new DateTime(2011, 1, 1);