Dai documenti ufficiali:
AVOID defining a struct unless the type has all of the following characteristics:
[...]
It has an instance size under 16 bytes.
[...]
So che un motivo per tenerlo sotto i 16 byte è che le strutture sono pensate per essere utilizzate in pila. Tuttavia, ci sono altri motivi?
Per non creare accidentalmente un problema XY, quello che voglio sapere è:
Questa regola di 16 byte ha ancora senso in una situazione in cui utilizzo una struct come campo privato in una classe?
Tutti noi adoriamo il codice, quindi ecco un esempio:
public struct Address
{
public readonly string Line1;
public readonly string Line2;
public Address(string line1, string line2)
{
Line1 = line1;
Line2 = line2;
}
}
public class Person
{
private Address _address;
[...]
public void ChangeAddressLine1(string newLine1)
{
_address = new Address(newLine1, _address.Line2);
}
}