Was ist die beste Vorgehensweise beim Erstellen Ihrer Ausnahmeklassen in einer .NET-Lösung: Ableiten von System.Exception
oder von System.ApplicationException
?
74
Laut Jeffery Richter im Buch Framework Design Guidelines:
System.ApplicationException
ist eine Klasse, die nicht Teil des .NET Frameworks sein sollte.
Es sollte eine Bedeutung haben, da Sie möglicherweise "alle" Anwendungsausnahmen abfangen können, aber das Muster wurde nicht befolgt und hat daher keinen Wert.
Exception
? Wenn ja, könnten Sie das sagen?Sie sollten benutzerdefinierte Ausnahmen von ableiten
System.Exception
.Sogar MSDN sagt jetzt zu ignorieren
ApplicationException
:http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx
quelle
ApplicationException
als nutzlos angesehen wird ein starkes und kritisches Argument dagegenApplicationException
.Fazit: Benutze es nicht. Ableiten von
Exception
.quelle
Die Autoren des Frameworks selbst halten ApplicationException für wertlos:
https://web.archive.org/web/20190904221653/https://blogs.msdn.microsoft.com/kcwalina/2006/06/23/applicationexception-considered-useless/
mit einem netten Follow-up hier:
https://web.archive.org/web/20190828075736/https://blogs.msdn.microsoft.com/kcwalina/2006/07/05/choosing-the-right-type-of-exception-to-throw/
Im Zweifelsfall folge ich ihrem Buch Framework Design Guidelines.
http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756
Das Thema des Blogposts wird dort weiter diskutiert.
rp
quelle
Ich bin es gewohnt:
private void buttonFoo_Click() { try { foo(); } catch(ApplicationException ex) { Log.UserWarning(ex); MessageVox.Show(ex.Message); } catch(Exception ex) { Log.CodeError(ex); MessageBox.Show("Internal error."); } }
Es erlaubt den Unterschied zu machen zwischen:
Ich weiß, dass die Verwendung von ApplicationException nicht empfohlen wird, aber es funktioniert hervorragend, da es nur sehr wenige Klassen gibt , die das ApplicationException-Muster nicht berücksichtigen.
quelle