只是好奇,正在改變一個結構/值類型的大小在C#中的突破性變化?結構在內存佈局方面往往更加敏感,因爲改變它們直接影響到數組/其他結構的大小。在它使用的庫中的結構佈局被更改之後,是否有任何破解代碼的例子,無論是二進制還是源代碼?正在改變一個結構的大小在C#中的重大變化?
注意:通過「中斷」,我的意思是它根本無法編譯或者IL失效。因此,例如我不會認爲這是一個突破的變化:
// My.Library v1
public struct MyStruct {}
// My.Library v2
public struct MyStruct { int _field; }
// App code
using My.Library;
using System.Runtime.InteropServices;
Console.WriteLine(Marshal.SizeOf<MyStruct>()); // before printed 1, now prints 4
因爲它仍然運行。
您是否使用InteropServices與非託管代碼進行交互?如果是的話,答案是肯定的,這是一個突破性的改變。如果否,答案會更加細緻。 –
對不起,我不明白你的問題...你重新編譯了大會,所以一切都應該沒問題? –
抖動隱藏了很多罪惡。結構大小在構建時不起作用,僅在運行時發揮作用。有未初始化的字段可能會令人驚訝。 –