Witam może ktoś mi powiedzieć, jak pisać zdefiniowanych przez użytkownika wyjątków w C#? Jak mamy w Javie możemy napisać w C#?Jak pisać wyjątki zdefiniowane przez użytkownika w C#?
5
A
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)
- Unikaj głębokich hierarchii przestrzeni nazw.
- Jeśli to możliwe, należy wyprowadzić jeden z dostarczonych wspólnych podstawowych wyjątków, tj.
ArgumentException
. JEDNAK Nie pochodzą odApplicationException
. To nie jest szkodliwe, nie ma sensu tego robić. MSDN Blog Post on ApplicationException. - Użyj sufiksu "Wyjątek".
- 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. - 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) { }
}
Powiązane problemy
- 1. Zdefiniowane przez użytkownika atrybuty w C++ 11?
- 2. Zdefiniowane przez użytkownika kwalifikatory
- 3. C++ zdefiniowane przez użytkownika operatory konwersji bez klas?
- 4. Jak połączyć zdefiniowane przez użytkownika funkcje basha z rurą
- 5. Najbardziej przydatne funkcje Aggregate zdefiniowane przez użytkownika
- 6. Czy mogę szablonować zdefiniowane przez użytkownika literały?
- 7. Jak przeciążyć funkcje zdefiniowane przez użytkownika w Matlab?
- 8. Zdefiniowane przez użytkownika motywy w aplikacji szyny: jak przechowywać zasoby
- 9. Jak mogę zachować zdefiniowane przez użytkownika szerokości kolumn w JTable?
- 10. Jak wykreślić funkcje zdefiniowane przez użytkownika w R?
- 11. Jak dodać metody zdefiniowane przez użytkownika w C# TBB (fragment kodu C#)?
- 12. Picking element losowy przez zdefiniowane przez użytkownika ciężarami
- 13. Dynamicznie Ponowne generowanie self-C++ wyjątki zdefiniowane jako wyjątki Python wykorzystujących SWIG
- 14. Jak wyglądają zdefiniowane przez użytkownika klasy wartości z Java?
- 15. Stosować zdefiniowane przez użytkownika ustawienia budować w zwyczaju .plist złożyć
- 16. gdzie umieścić Klasy zdefiniowane przez użytkownika w Rails
- 17. Nie widać bazodanowych „typów” zdefiniowane przez użytkownika w pgAdmin
- 18. Definiowane przez użytkownika ciągi liter słów kluczowych. Inne literały zdefiniowane przez użytkownika
- 19. Korzystanie zdefiniowane przez użytkownika literały w wyrażeniach czasami wymaga spacje
- 20. Gdzie umieścić funkcje zdefiniowane przez użytkownika w Angular JS?
- 21. Czy literowe zdefiniowane przez użytkownika łańcuchy mogą być silnie wpisane?
- 22. jak pisać konstruktory dziedziczenia C++
- 23. Wyjątki C++ rzucane przez wartość catch przez odwołanie
- 24. Dziedzicz wyjątki w C++
- 25. zdefiniowane przez użytkownika ActionBar działania Widok: coraz szerokość prawo
- 26. Niestandardowe wyjątki w C++
- 27. Czy MySQL obsługuje typy danych zdefiniowane przez użytkownika
- 28. JMeter - Zmiana zdefiniowane przez użytkownika zmienne z linii poleceń
- 29. Jak pisać metody lambda w Objective-C?
- 30. Jak pisać na środku pliku w C++?
Zgodnie z wytycznymi projektowania .NET Framework, masz dziedziczyć bezpośrednio z wyjątku, chyba że masz naprawdę dobry powód, by wybrać coś innego. –
@ 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ę. –