为什么我们使用new关键字初始化结构虽然它是一个值类型

时间:2011-11-21 07:53:39

标签: c# structure

为什么我们使用new关键字来初始化结构,即使它是C#中的值类型?

2 个答案:

答案 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;