Po prostu ciekawy, czy zmiana rozmiaru typu struct/value powoduje zmianę zerwania w C#? Struktury są bardziej wrażliwe pod względem układu pamięci, ponieważ ich zmiana wpływa bezpośrednio na rozmiar tablic/innych struktur. Czy są jakieś przykłady kodu, który łamie się, binarnie lub źródłowo, po zmianie układu struktury w bibliotece, której używa?Czy zmiana rozmiaru struktury jest przełamującą zmianą w C#?
UWAGA: Przez "przerwy" mam na myśli, że w ogóle się nie kompiluje lub IL jest unieważniony. Więc na przykład nie uważam tego za przełomową zmianę:
// 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
ponieważ nadal działa.
Czy używasz InteropServices do interakcji z niezarządzanym kodem? Jeśli tak, odpowiedź brzmi "tak", jest to przełomowa zmiana. Jeśli nie, odpowiedź jest bardziej zniuansowana. –
Przepraszam, nie rozumiem twojego pytania ... Rekompilowałeś Zgromadzenie, więc wszystko powinno być w porządku? –
Dżin kryje wiele grzechów. Wielkości struktur nie odgrywają żadnej roli w czasie kompilacji, tylko w środowisku wykonawczym. Posiadanie niezainicjowanego pola może być zaskakujące. –