Wykopałem SO, aby znaleźć odpowiedź na to pytanie, a najlepszym, jaki mogę znaleźć do tej pory, jest here, jednak jest ono ukierunkowane na instancje z konstruktorami statycznymi; Używam klasy tylko statycznie.Wyjątek w konstruktorze statycznym
Mój kod:
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);
.
Więc jeśli statyczny konstruktor zgłasza wyjątek po raz pierwszy nazywa, co dzieje się drugi raz spróbować uzyskać dostęp do metody statycznej sendmail()?
PS: Przepraszam, jeśli nie podoba ci się wersja stylu K Stroustrup K & R, ale nie edytuj mojego posta tylko po to, aby zmienić nawiasy klamrowe na preferowany styl Allmana. Dzięki.
To powinno się nie udać, ale co jest nie tak z wypróbowaniem tego dla siebie? –
Nie sądzę, że naprawdę ma sens rzut z konstruktora (statyczny), ponieważ wtedy klasa jest w stanie niestabilnym (nie w pełni zainicjowany). A co z tworzeniem jawnej funkcji 'Init()', którą wywołujesz przed użyciem (nie powinieneś nic robić, jeśli już została zainicjalizowana) i jeśli zgłasza wyjątek, * nie używaj klasy * – Cameron
Pontus> Myślałem, że Jon może potrzebować czegoś więcej punktów:) –