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);
}
}
當你試圖運行它時,你不會得到運行時錯誤嗎?因爲引用和值類型相互重疊是非法的...... –
不。沒有運行時錯誤。它編譯和運行得很好。 – x2bool
當我試圖運行你的代碼時,我得到了'TypeLoadException'。該消息指出:_Could不能從程序集'Test,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'加載類型Test.Data',因爲它包含一個偏移量爲0的對象字段, object field._這是由設計決定的,因爲你不應該重疊引用和值類型。 –