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
Odpowiedz
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.
dobre wyjaśnienie, z przykładami dostaje mój głos akceptować. – andrewWinn
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.
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.
Niedawno napisałem cały wpis na blogu na temat tego konkretnego tematu:
- http://blogs.msdn.com/jaredpar/archive/2008/10/20/custom-exceptions-when-should-you-create-them.aspx
Podstawowym podsumowanie chociaż jest ...
Należy utworzyć tylko nowy wyjątek jeśli spodziewasz się, że deweloperzy podejmą działania naprawcze w celu rozwiązania problemu lub zalogują się do debugowania post mortem.
Jest rzeczywiście wielki cykl artykułów MSDN na ten temat:
Why create custom exceptions?
dla profesjonalistów/minusy Korzystanie wyjątkami zobaczyć How to throw a good exception
Factors to consider when using custom exceptions
Best practices for creating Custom Exceptions
Creating and Throwing Exceptions
- 1. Rzucanie niestandardowych wyjątków w języku Java
- 2. Rzucanie niestandardowych wyjątków w JavaScript. Który styl użyć?
- 3. Obsługa wyjątków: rzut, rzuty i rzucanie się
- 4. Implementowanie niestandardowych wyjątków w przenośnej bibliotece klas
- 5. Obsługa wyjątków w C++: Rzucanie podwójnym przy użyciu "throw (int)"
- 6. Zgłaszanie wielu wyjątków w .Net/C#
- 7. .Net WFC/serwis internetowy obsługa wyjątków wzornictwo
- 8. Jak uniknąć powtórzeń w niestandardowych klasach wyjątków Javy
- 9. Symfony2 i wyjątek rzucanie błąd
- 10. .net core - StaticFiles z niestandardowych DefaultFiles-Definicje
- 11. Używanie niestandardowych atrybutów .NET w świecie rzeczywistym
- 12. Dziwna terminologia wyjątków "wyrzucanie"
- 13. $ .post rzucanie "Nielegalna inwokacja"
- 14. rzucanie wyjątku z CompletableFuture
- 15. UserManager Przechowuje rzucanie System.ArgumentNullException
- 16. Lista rzucanie UnsupportedOperationException
- 17. Rzucanie jajkami z budynku
- 18. Rzucanie wyniku TableOperation.Retrieve
- 19. rzucanie surowych ciągów python
- 20. Mongoose connect rzucanie ostrzeżenie
- 21. .NET - słuchacz wyjątków pierwszej szansy do intensywnego debugowania?
- 22. Globalny program obsługi wyjątków .NET w aplikacji konsoli
- 23. zaleglowanie nieobsłużonych wyjątków w dodatkach .NET excel (XLL)?
- 24. C# .NET Web Services - przekazywanie niestandardowych obiektów do usługi WWW
- 25. Dlaczego najlepszą metodą .Net jest projektowanie niestandardowych atrybutów jako zamkniętych?
- 26. Rzucanie wyjątku C++ po skoku inline-asm
- 27. rzucanie Sprawdzone Wyjątki od zajęć Anonymous wewnętrzne
- 28. wykorzystania zasobów wyjątków
- 29. SceneKit - Oświetlenie i rzucanie cieni
- 30. Szyny Wygeneruj rzucanie Najmniejszy błąd?
Dupe: http://stackoverflow.com/questions/417428/why-create-custom-exceptions –
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
Jest to z pewnością lepsze sformułowanie niż połączony duplikat. Będę głosować, aby ponownie otworzyć, jeśli się zamknie. – Randolpho