Ho scavato intorno a SO per una risposta a questo, e il migliore che riesco a trovare finora è here, tuttavia è orientato verso le istanze con costruttori statici; Sto solo usando la classe in modo statico.Eccezione nel costruttore statico
Il mio codice:
public static class MailHelper {
private static string mailHost;
static MailHelper() {
var mailSettings = ConfigurationManager.GetSection("MailSettings") as NameValueCollection;
if (null == mailSettings) {
throw new ConfigurationErrorsException("Missing Mail Settings in the configuration file");
}
mailHost = ConfigurationManager.AppSettings["mailHost"];
if (null == mailHost) {
throw new ConfigurationErrorsException("Missing mailHost setting in the configuration file");
}
}
public static void SendMail(MailMessage Message) {
...
}
}
try {
MailHelper.SendMail(Message);
}
catch (ConfigurationErrorsException exc) {
...
}
// ???
MailHelper.SendMail(Message);
.
Quindi, se il costruttore statico genera un'eccezione per la prima volta si chiama, quello che succede la seconda volta che provo ad accedere al metodo statico SendMail()?
PS: Ci scusiamo se non ti piace la versione di Stroustrup di K & R parentesi graffa, ma non modificare il mio post solo per cambiare le parentesi graffe al tuo stile preferito Allman. Grazie.
Dovrebbe fallire, ma cosa c'è di sbagliato nel provarlo da solo? –
Non penso che abbia senso lanciare da un costruttore (statico), perché la classe è in uno stato instabile (non completamente inizializzato). Che ne dici di creare una funzione esplicita 'Init()' che chiami prima dell'uso (non dovrebbe fare nulla se è già inizializzata), e se lancia un'eccezione, * non usare la classe * – Cameron
Pontus> Pensavo che Jon potesse aver bisogno di qualche più punti:) –