为什么我们不将new
运算符用于值类型而不是其余用于对象构造?
答案 0 :(得分:5)
您可以将new
与值类型一起使用,但int
,float
和bool
等原始值类型通常没有除默认构造函数之外的任何内容为您提供给定值类型的默认值,因此在分配实际值(从方法调用获得或通过硬编码文字值)之前,没有必要这样做。这就是您很少看到具有原始值类型的new
的原因。
像Rect
这样的结构具有带参数的构造函数,您可以使用new
在初始化时调用这些参数,就像初始化引用类型一样:
var rect = new Rect(100, 100, 450, 240);
结构类似于类,唯一(和关键)区别在于它们实际上是值类型。实际上,int
,float
和bool
都是分别与System.Int32
,System.Single
和System.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);