So implementieren Sie eine benutzerdefinierte Ausnahmeklasse in C #

Eine Ausnahme ist ein Fehler, der zur Laufzeit auftritt und den normalen Ausführungsfluss eines Programms beendet, wenn er nicht ordnungsgemäß behandelt wird. Wenn Ausnahmen auftreten, möchten Sie dem Benutzer möglicherweise nicht die tatsächliche Stapelverfolgung oder Ausnahmemeldung anzeigen. Benutzerdefinierte Ausnahmen können verwendet werden, um Ausnahmen klare, aussagekräftige und benutzerfreundliche Informationen hinzuzufügen, wenn während der Ausführung Ihres Programms Fehler auftreten.

Die Basisklasse für alle Ausnahmen in .Net ist Exception. Alle Klassen in der Ausnahmehierarchie leiten sich direkt oder indirekt von dieser Klasse ab. Beachten Sie, dass die System.ApplicationExceptionund System.SystemExceptionKlassen erweitern die System.ExceptionKlasse, die wiederum von der abgeleiteten System.ObjectKlasse. Beachten Sie, dass Ausnahmen wie alle anderen Typen in .Net sind.

ApplicationException vs. System.Exception

Um eine benutzerdefinierte Ausnahmeklasse zu erstellen, sollten Sie einen Typ definieren. Wenn Sie benutzerdefinierte Ausnahmeklassen entwerfen, sollten Sie Ihre Klasse von System.Exceptionund nicht von ableiten ApplicationException. ApplicationExceptionwar ursprünglich für die Erstellung benutzerdefinierter Ausnahmen vorgesehen, wird jedoch nicht mehr empfohlen. In der Dokumentation von Microsoft heißt es: 

Sie sollten benutzerdefinierte Ausnahmen von der Exception Klasse und nicht von der Klasse  ableiten  ApplicationException . Sie sollten keine  ApplicationException Ausnahme in Ihrem Code auslösen und keine ApplicationException Ausnahme abfangen, es  sei denn, Sie beabsichtigen, die ursprüngliche Ausnahme erneut auszulösen.

Der Grund ApplicationExceptiondafür ist, dass durch die Verwendung die Ausnahmehierarchie unnötig erweitert wird. Obwohl die ApplicationExceptionKlasse die ExceptionKlasse erweitert, werden keine neuen Funktionen hinzugefügt. Der einzige Zweck bestand darin, eine Möglichkeit zur Unterscheidung zwischen von Anwendungen definierten und vom System definierten Ausnahmen bereitzustellen.  

Entwerfen einer benutzerdefinierten Ausnahmeklasse

Lassen Sie uns nun einen Code untersuchen. Das folgende Codeausschnitt zeigt, wie Sie mit dem Erstellen einer benutzerdefinierten Ausnahmeklasse in C # beginnen können, indem Sie die System.ExceptionKlasse ableiten . Beachten Sie, dass Sie Ihrer benutzerdefinierten Ausnahmeklasse einen aussagekräftigen Namen geben sollten. In diesem Beispiel erstellen wir eine benutzerdefinierte Ausnahmeklasse mit dem Namen, mit LoginException, der Fehler abgefangen werden können, die auftreten können, wenn sich ein Benutzer beim System anmeldet, z. B. wenn die Benutzeranmeldeinformationen falsch sind.

öffentliche Klasse LoginException: System.Exception

    {

       //MACHEN

    }}

Die folgende Codeliste zeigt unsere benutzerdefinierte Ausnahmeklasse mit den implementierten Standard- und Argumentkonstruktoren.

öffentliche Klasse LoginException: System.Exception

    {

        ///

        /// Standardkonstruktor

        ///

        public LoginException (): base ()

        {

        }}

        ///

        /// Argument Konstruktor

        ///

        /// Dies ist die Beschreibung der Ausnahme

        public LoginException (String message): base (message)

        {

        }}

        ///

        /// Argumentkonstruktor mit innerer Ausnahme

        ///

        /// Dies ist die Beschreibung der Ausnahme

        /// Innere Ausnahme

        public LoginException (String message, Exception innerException): base (message, innerException)

        {

        }}

        ///

        /// Argumentkonstruktor mit Serialisierungsunterstützung

        ///

        /// Instanz von SerializationInfo

        /// Instanz von StreamingContext

        geschützte LoginException (SerializationInfo-Informationen, StreamingContext-Kontext): base (Informationen, Kontext)

        {

        }}

    }}

Beachten Sie die Verwendung der Parameter im Konstruktor der LoginExceptionKlasse und wie die Basisklassenkonstruktoren aufgerufen werden. Beachten Sie auch, wie der letzte Argumentkonstruktor verwendet wird, um die Serialisierung zu unterstützen.

Verwenden einer benutzerdefinierten Ausnahmeklasse

Die folgende Codeliste zeigt, wie Sie die LoginExceptiongerade implementierte Klasse verwenden können.

statische Leere Main (string [] args)

        {

            Versuchen

            {

                // Schreiben Sie hier Code, um den Benutzer anzumelden.

                // Wenn die angegebenen Anmeldeinformationen ungültig sind

                // ein Ausnahmeobjekt wird ausgelöst.

          neue LoginException auslösen ("Ungültige Anmeldeinformationen bereitgestellt ...");

            }}

            catch (LoginException loginException)

            {

                // Schreiben Sie hier Code, um die Ausnahme zu behandeln

                Console.WriteLine (loginException.Message);

            }}

            Console.Read ();

        }}

Beachten Sie, dass Sie benutzerdefinierte Ausnahmeklassen nur implementieren sollten, wenn Sie der Ausnahmebehandlung in Ihren Anwendungen mehr Funktionen hinzufügen möchten oder wenn es sinnvoll ist, dem Benutzer zusätzliche Informationen zu geben. In den meisten Fällen sollten Sie sich auf die Standardausnahmen verlassen, die .Net Ihnen bietet.