2010-10-04 11 views

Antwort

11

Es ist praktisch das gleiche wie in Java - Sie erweitern die Exception Klasse.

In der einfachsten Form.

public class CustomException : System.Exception 
{ 
    public CustomException() 
    { 
    } 

    public CustomException(string message) 
    : base(message) 
    { 
    } 

    public CustomException(string message, System.Exception innerException) 
    : base(message, innerException) 
    { 
    } 
} 

Fügen Sie dazu die Daten hinzu, die Sie mit Feldern oder Eigenschaften erfassen möchten.

Aus Interesse, bevor ich diese Frage beantwortete, überprüfte ich die Microsoft Design Guildlines auf benutzerdefinierten Ausnahmen. Designing Custom Exceptions (MSDN)

  1. Vermeiden Sie tiefe Namespace-Hierarchien.
  2. Wenn möglich, leiten Sie von einem der bereitgestellten gemeinsamen Basisausnahmen ab, d. H. ArgumentException. JEDOCH Nicht von ApplicationException abgeleitet. Es ist nicht schädlich, es macht keinen Sinn. MSDN Blog Post on ApplicationException.
  3. Verwenden Sie das Suffix "Exception".
  4. Machen Sie Ausnahmen serialisierbar, indem Sie die Schnittstelle ISerializable implementieren. Offensichtlich muss eine Ausnahme serialisierbar sein, um über die Anwendungsdomänen- und Remotinggrenzen hinweg korrekt zu funktionieren.
  5. Speichern Sie sicherheitsrelevante Informationen in einem privaten Ausnahmezustand, fügen Sie ein SecurityPermission-Attribut hinzu, um sicherzustellen, dass nur vertrauenswürdiger Code die Informationen abrufen kann.

I sehr empfehlen die Design Guidelines auf MSDN lesen.

16

Sie möchten von System.Exception erben und vorzugsweise (mindestens) dieselben öffentlichen Konstruktoren bereitstellen und die Parameter an die Basiskonstruktoren übergeben. Fügen Sie die relevanten Eigenschaften und/oder Methoden hinzu, die Sie für Ihre speziellen Anforderungen als geeignet erachten.

public class MyException : System.Exception 
{ 
    public MyException() : base() { } 
    public MyException(string message) : base(message) { } 
    public MyException(string message, Exception innerException) : base(message, innerException) { } 
} 
+0

Gemäß den Designrichtlinien für .NET Framework sollen Sie direkt von Exception erben, es sei denn, Sie haben einen wirklich guten Grund, etwas anderes auszuwählen. –

+0

@ Jonathan: Alle Systeme wieder normal. Löschte meine blöde Antwort und entfernte meinen nutzlosen Kommentar. Upvoted die Antwort im Namen von SO Geist. Danke für die Korrektur. –