Come implementare una struttura / struttura .NET vincolata (diciamo LimitedString
), dove il suo stato con i valori predefiniti (impostato da CLR a valori tecnici predefiniti, vale a dire null, zeri, ecc.) dovrebbe essere proibito a causa di alcuni design vincolo?
Ad esempio, in caso di banale struct LimitedString
, le proprietà sono String Value
e int MaxLength = 10
, dove il valore della proprietà MaxLength
deve essere almeno 1
. Il valore 0
non è consentito dalla progettazione. Ma quando initalizzo la struttura, ho 0
lì. Come forzare il valore 10
nei valori predefiniti?
Vedo due opzioni:
- Genera un'eccezione in
static
( vb.netshared
) costruttore senza parametri → forza usando solo costruttore / i con parametri. A volte è previsto un uso improprio e senza parametri. - Aggiungi campo privato helper
IsInitialized
e mentre èfalse
, assume valori predefiniti, cioèMaxLength = 10
. Una complessità leggermente superiore all'interno della struttura
L'opzione # 2 è legittima o viola alcuni principi di progettazione? C'è un modo migliore rispetto all'opzione # 2?
EDIT: l'opzione # 1 non funzionerà comunque, il costruttore menzionato viene chiamato ogni volta, anche se vengono chiamati altri costruttori.