2013-12-11 34 views
1

是否允许下面的代码?内部结构在外部内声明,并且不调用新的结构。它不会崩溃,但我对此有所怀疑。没有新的C#内部结构

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); 
} 
+1

实际上就是你的问题_‘什么是不明确的初始化结构的’_? – CodeCaster

回答

3

值类型(结构是值类型)与默认值自动构建,因此该代码将确定(如果我正确地理解你的问题)。

More about value type

+0

默认值啊,我总是还以为他们也必须新兴起来,谢谢! – Laurijssen

4

MSDN列举了以下和显示的Structs如何从类(参见我在大胆格式化的部分,他们应该回答你的问题)不同:

“的Structs份额大多数语法与类相同,尽管结构比类更有限:

  • 在结构声明中,字段不能被初始化,除非它们是decl ared为常量或静态。
  • 结构体无法声明默认构造函数(不带参数的构造函数)或析构函数。
  • 结构在作业上被复制。将结构分配给新变量时,将复制所有数据,并且对新副本的任何修改都不会更改原始副本的数据。在使用诸如Dictionary<string, myStruct>等价值类型集合时,记住这一点很重要。
  • 结构是值类型,类是参考类型。
  • 与类不同,可以在不使用运算符new的情况下实例化结构。
  • Structs可以声明具有参数的构造函数。
  • 结构不能从另一个结构或类继承,并且它不能作为类的基础。所有结构都直接继承自System.ValueType,它继承自System.Object
  • 结构可以实现接口。
  • 一个结构可以用作可空类型,可以分配一个空值。”