2013-12-11 31 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
  • 結構可以實現接口。
  • 一個結構可以用作可空類型,可以分配一個空值。」