2016-01-08 17 views
0

編輯:一切波紋管適用於單聲道/ Xamarin,但.NET崩潰,並TypeLoadException當一個結構中的某個明確佈局的字段是一個對象時會發生什麼?

當FIELD2打印到標準輸出我一次我運行程序時一個新的整數。這個值的含義是什麼?

class Program 
{ 
    [StructLayout(LayoutKind.Explicit)] 
    struct Data 
    { 
     [FieldOffset(0)] 
     public object Field1; 

     [FieldOffset(0)] 
     public int Field2; 
    } 

    public static void Main() 
    { 
     var a = new Data(); 
     a.Field1 = new object(); 
     Console.WriteLine(a.Field2); 
    } 
} 
+0

當你試圖運行它時,你不會得到運行時錯誤嗎?因爲引用和值類型相互重疊是非法的...... –

+0

不。沒有運行時錯誤。它編譯和運行得很好。 – x2bool

+0

當我試圖運行你的代碼時,我得到了'TypeLoadException'。該消息指出:_Could不能從程序集'Test,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'加載類型Test.Data',因爲它包含一個偏移量爲0的對象字段, object field._這是由設計決定的,因爲你不應該重疊引用和值類型。 –

回答

1

這是一個指針。
IMO,你應該避免在明確的佈局結構中使用引用類型字段。

相關問題