Ognuno ha coperto l'ovvio, quindi ecco un'altra opzione.
Se la classe deve essere inizializzata in qualche modo (il proprio SomeObject
deve essere impostato ad un certo punto), considerare l'implementazione di ISupportInitialize. Ciò indica agli utenti della tua classe che non è in uno stato valido prima della chiamata allo EndInit()
. Sfortunatamente, non esiste un generale preesistente NotInitializedException
che è possibile utilizzare (ce ne sono alcuni ma sono specifici per determinati spazi dei nomi), quindi suggerirei di associare l'implementazione dell'interfaccia con la creazione di tale eccezione.
Gli utenti devono prima chiamare il numero BeginInit()
, quindi configurare l'istanza, quindi chiamare EndInit()
. Nella chiamata allo EndInit()
, verificare lo stato dell'istanza. Se non è correttamente inizializzato, puoi lanciare un InvalidOperationException. Se gli utenti tentano di utilizzare la tua istanza prima di essere inizializzata, invierai la tua NotInitializedException.
È un po 'più di lavoro, ma il vantaggio è che si sta creando un "pozzo di successo" più ampio per i propri utenti, assicurando che utilizzino correttamente le classi non riuscendo in modo rapido e precoce e dalla definizione stessa del proprio tipo (l'interfaccia è abbastanza chiara su quello che ti aspetti). Ti dà anche più "spazio", per così dire, per documentare come la tua classe dovrebbe essere usata.
Forse questa è una domanda per il suo argomento, ma perché buttarne uno a tutti? – 4imble
IMPORTANTE Nota: una proprietà dovrebbe (quasi) non generare mai un'eccezione durante la lettura. (InvalidOperation è uno che puoi comunque). http://msdn.microsoft.com/en-us/library/bb386039.aspx – FastAl