2010-10-04 11 views

Odpowiedz

11

Jest praktycznie taki sam jak w Javie - rozszerzasz klasę Exception.

W najbardziej podstawowej formie.

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

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

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

Do tego następnie dodaj dane, które chcesz przechwycić za pomocą pól lub właściwości.

W interesie, przed udzieleniem odpowiedzi na to pytanie, sprawdziłem gildie Design firmy Microsoft na niestandardowych wyjątkach. Designing Custom Exceptions (MSDN)

  1. Unikaj głębokich hierarchii przestrzeni nazw.
  2. Jeśli to możliwe, należy wyprowadzić jeden z dostarczonych wspólnych podstawowych wyjątków, tj. ArgumentException. JEDNAK Nie pochodzą od ApplicationException. To nie jest szkodliwe, nie ma sensu tego robić. MSDN Blog Post on ApplicationException.
  3. Użyj sufiksu "Wyjątek".
  4. Umożliwiają przetwarzanie wyjątków za pomocą interfejsu ISerializable. Wygląda na to, że wyjątek musi zostać poddany serializacji, aby działał poprawnie w całej domenie aplikacji i usuwał granice.
  5. Przechowuj poufne informacje dotyczące bezpieczeństwa w stanie wyjątku prywatnego, dodaj atrybut SecurityPermission, aby zapewnić, że tylko zaufany kod może uzyskać te informacje.

I wysoce polecam czytanie Design Guidelines na MSDN.

16

Chcesz dziedziczyć po System.Exception i preferować dostarczanie (przynajmniej) tych samych publicznych konstruktorów i przekazywanie parametrów do konstruktorów bazowych. Dodaj odpowiednie właściwości i/lub metody, które uznasz za stosowne do danej potrzeby.

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

Zgodnie z wytycznymi projektowania .NET Framework, masz dziedziczyć bezpośrednio z wyjątku, chyba że masz naprawdę dobry powód, by wybrać coś innego. –

+0

@ Jonathan: Wszystkie systemy wróciły do ​​normy. Usunąłem moją głupią odpowiedź i usunąłem mój bezużyteczny komentarz. Wzniosła odpowiedź w imieniu ducha SO. Dzięki za korektę. –

Powiązane problemy