2009-10-15 22 views
10

Czy ktoś może rzucić nieco światła na plusy i minusy rzucania niestandardowych wyjątków (które dziedziczą po System.Exception), lub właściwego sposobu ich użycia? Jestem już świadomy, kiedy/kiedy nie wyrzucać wyjątek, ale szukam wskazówek, jak tworzyć własne niestandardowe wyjątki..NET Rzucanie niestandardowych wyjątków

+1

Dupe: http://stackoverflow.com/questions/417428/why-create-custom-exceptions –

+0

Nie nazwałbym tego dupkiem, blisko, ale nie do końca w mojej książce, może po prostu nie byłem wystarczająco jasny w moim pytaniu. – andrewWinn

+0

Jest to z pewnością lepsze sformułowanie niż połączony duplikat. Będę głosować, aby ponownie otworzyć, jeśli się zamknie. – Randolpho

Odpowiedz

9

To są świetne posty. Do tej pory zgadzam się najbardziej z Brianem Rasmussenem - utwórz niestandardowe wyjątki, gdy chcesz obsługiwać różne typy określonych wyjątków.

Być może pomoże Ci przykład. Jest to wymyślny przykład i może być przydatny w codziennym kodzie. Załóżmy, że masz klasę odpowiedzialną za uwierzytelnianie użytkownika. Ta klasa, oprócz uwierzytelniania użytkownika, ma mechanizm blokujący, aby zablokować użytkownika po kilku nieudanych próbach. W takim przypadku można zaprojektować jako część niestandardowych wyjątków klasy drugiej: AuthenticationFailedException i UserLockedOutException. Twoja metoda AuthenticateUser po prostu powróci bez rzucania, jeśli użytkownik został pomyślnie uwierzytelniony, wyrzuci AuthenticationFailedException, jeśli użytkownik nie przeszedł uwierzytelnienia lub wyrzuci UserLockedOutException, jeśli użytkownik został zablokowany.

Na przykład

try 
{ 
    myAuthProvider.AuthenticateUser(username, password); 
    ShowAuthSuccessScreen(); 
} 
catch(AuthenticationFailedException e) 
{ 
    LogError(e); 
    ShowAuthFailedScreen(); 
} 
catch(UserLockedOutException e) 
{ 
    LogError(e); 
    ShowUserLockedOutScreen(); 
} 
catch(Exception e) 
{ 
    LogError(e); 
    ShowGeneralErrorScreen(); 
} 

Ponownie, na dobry przykład. Ale mam nadzieję, że pokazuje, jak i dlaczego chcesz tworzyć niestandardowe wyjątki. W tym przypadku użytkownik klasy AuthProvider obsługuje każdy wyjątek niestandardowy w inny sposób.Jeśli metoda AuthenticateUser po prostu wyrzuciła Exception, nie byłoby sposobu na rozróżnienie między różnymi przyczynami, dla których wyjątek został zgłoszony.

+1

dobre wyjaśnienie, z przykładami dostaje mój głos akceptować. – andrewWinn

1

Niestandardowe wyjątki umożliwiają podawanie wyraźnych, znaczących wyjątków, co z kolei może uczynić bibliotekę bardziej użyteczną, o ile zaistnieje potrzeba użycia istniejących wyjątków.

Utwórz niestandardowy wyjątek za każdym razem, gdy trzeba zgłosić wyjątek, który nie pasuje bezpośrednio do modelu wyjątku.

4

Użyj własnych wyjątków, aby oznaczać błędy, które są specyficzne dla Twojej aplikacji/domeny. Zaletą jest to, że bloki przechwytujące mogą filtrować poprawne wyjątki i działać w tym kierunku. Używaj określonych standardowych wyjątków dla wszystkich pozostałych.

Powiązane problemy