Semplicemente curioso, sta cambiando la dimensione di un tipo di struttura/valore come una modifica in C#? Le strutture tendono ad essere più sensibili in termini di layout della memoria poiché la loro modifica influisce direttamente sulle dimensioni degli array/altre strutture. Ci sono esempi di codice che si rompono, sia in termini di binari che di origine, dopo che il layout di una struttura in una libreria che usa è cambiato?La dimensione di una struttura sta cambiando in C#?
NOTA: Per "interruzioni", intendo che non riesce a compilare affatto o che IL è invalidato. Così, per esempio non vorrei considerare questo un cambiamento di rottura:
// 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
perché corre ancora.
Si sta utilizzando InteropServices per interagire con codice non gestito? Se è così, la risposta è sì, è un cambio di rottura. Se no, la risposta è più sfumata. –
Scusa, non capisco la tua domanda ... Hai ricompilato l'assemblea, quindi tutto dovrebbe andare bene? –
Il jitter nasconde molti peccati. Le dimensioni della struttura non hanno alcun ruolo al momento della compilazione, solo in fase di esecuzione. Avere un campo non inizializzato potrebbe essere sorprendente. –