Wenn das Werfen System.Exception
so schlecht ist, warum wurde es dann überhaupt nicht Exception
gemacht abstract
?
Auf diese Weise wäre es nicht möglich anzurufen:
throw new Exception("Error occurred.");
Dies würde die Verwendung abgeleiteter Ausnahmen erzwingen, um weitere Details zu dem aufgetretenen Fehler bereitzustellen.
Wenn ich beispielsweise eine benutzerdefinierte Ausnahmehierarchie für eine Bibliothek bereitstellen möchte, deklariere ich normalerweise eine abstrakte Basisklasse für meine Ausnahmen:
public abstract class CustomExceptionBase : Exception
{
/* some stuff here */
}
Und dann eine abgeleitete Ausnahme mit einem genaueren Zweck:
public class DerivedCustomException : CustomExceptionBase
{
/* some more specific stuff here */
}
Wenn Sie dann eine Bibliotheksmethode aufrufen, kann dieser generische try / catch-Block verwendet werden, um Fehler aus der Bibliothek direkt abzufangen:
try
{
/* library calls here */
}
catch (CustomExceptionBase ex)
{
/* exception handling */
}
Ist das eine gute Übung?
Wäre es gut, wenn Exception
abstrakt gemacht würde?
EDIT: Mein Punkt hier ist, dass auch wenn eine Ausnahmeklasse markiert ist abstract
, Sie sie immer noch in einem Catch-All-Block abfangen können. Es abstrakt zu machen, ist nur eine Möglichkeit, Programmierern zu verbieten, eine "Super-Wide" -Ausnahme auszulösen. Wenn Sie freiwillig eine Ausnahme auslösen, sollten Sie normalerweise wissen, um welchen Typ es sich handelt und warum dies passiert ist. So wird erzwungen, einen spezifischeren Ausnahmetyp auszulösen.