为什么我们使用new
关键字来初始化结构,即使它是C#中的值类型?
答案 0 :(得分:6)
因为这是语言规范所说的使用来初始化值类型的关键字(通过自定义构造函数或简单地将内存归零(无参数new()
用法)值类型),虽然有一个边缘情况,即使这是不必要的)。为同一个概念添加不同的语言关键字似乎很奇怪。更重要 - 如果你考虑泛型:
public static T Create<T>() where T : new() // not terribly helpful, but....
{
return new T();
}
如果引用类型和值类型有不同的关键字,这对于var zero = Create<int>()
来说会非常混乱。再一次,这个例子很愚蠢,但有一点是存在的。
答案 1 :(得分:4)
使用new运算符创建struct对象时,会创建它并调用相应的构造函数。
但有一个例外。可以在不使用new运算符的情况下实例化结构。在这种情况下,没有构造函数调用,这使得分配更有效。但是,字段将保持未分配状态,并且在初始化所有字段之前无法使用该对象。
例如:
public struct CoOrds
{
public int x, y;
public CoOrds(int p1, int p2)
{
x = p1;
y = p2;
}
}
// Declare an
CoOrds coords1;
// Initialize:
coords1.x = 10;
coords1.y = 20;