C#内部结构没有新的

时间:2013-12-11 09:03:33

标签: c# .net

是否允许以下​​代码?内部结构在外部中声明,并且不为结构调用new。它没有崩溃,但我对此有所怀疑。

struct Inner
{
    public int i;
}

private class Outer
{
    public Outer() { inner.i = 10; }

    private int i;
    public Inner inner;
}

private static void Main(string[] arg)
{
    Outer o = new Outer();

    Console.WriteLine(o.inner.i);
}

2 个答案:

答案 0 :(得分:4)

以下是MSDN引用的内容,并展示了Structs与类的不同之处(请参阅我用粗体格式化的部分,它们应该回答您的问题):

“Structs与类共享大部分相同的语法,尽管结构比类更有限:

  • 在结构声明中,除非将字段声明为const或static,否则无法初始化字段。
  • 结构体不能声明默认构造函数(不带参数的构造函数)或析构函数。
  • 根据作业复制结构。将结构分配给新变量时,将复制所有数据,并且对新副本的任何修改都不会更改原始副本的数据。在使用Dictionary<string, myStruct>
  • 等值类型集合时,请务必记住这一点
  • 结构是值类型,类是引用类型。
  • 与类不同,可以在不使用new运算符的情况下实例化结构。
  • 结构可以声明具有参数的构造函数。
  • 结构不能从其他结构或类继承,也不能作为类的基础。所有结构都直接从System.ValueType继承,继承自System.Object
  • 结构可以实现接口。
  • 结构可以用作可空类型,并且可以赋予空值。“

答案 1 :(得分:3)

使用默认值自动构造的值类型(结构是值类型),因此这段代码可以正常(如果我正确理解你的问题)。

More about value type