Udostępnij za pośrednictwem


Używanie standardowych typów wyjątków

Uwaga / Notatka

Ta treść jest przedrukowana za zgodą Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2. wydanie. Wydanie to zostało opublikowane w 2008 roku, a książka została w pełni zmieniona w trzecim wydaniu. Niektóre informacje na tej stronie mogą być nieaktualne.

W tej sekcji opisano standardowe wyjątki udostępniane przez platformę i szczegóły ich użycia. Lista nie jest w żaden sposób wyczerpująca. Zapoznaj się z dokumentacją referencyjną programu .NET Framework, aby zapoznać się z użyciem innych typów wyjątków platformy Framework.

Wyjątek i SystemException

❌ NIE rzucaj System.Exception ani System.SystemException.

❌ NIE przechwytuj System.Exception ani System.SystemException w kodzie struktury, chyba że zamierzasz ponownie wywrócić.

❌ UNIKAJ przechwytywania System.Exception lub System.SystemException, z wyjątkiem procedur obsługi wyjątków najwyższego poziomu.

ApplicationException

❌ NIE rzucaj lub dziedzicz z ApplicationException.

WyjątekNiepoprawnejOperacji

✔️ Rzucaj błąd InvalidOperationException, jeśli obiekt jest w niewłaściwym stanie.

ArgumentException, ArgumentNullException i ArgumentOutOfRangeException

✔️ Wyrzuć ArgumentException lub jeden z jego podtypów, jeśli złe argumenty zostały przekazane do członu. Preferuj najbardziej pochodny typ wyjątku, jeśli ma to zastosowanie.

✔️ Ustaw właściwość ParamName podczas rzucania jednej z podklas klasy ArgumentException.

Ta właściwość reprezentuje nazwę parametru, który spowodował zgłoszenie wyjątku. Należy pamiętać, że właściwość można ustawić poprzez użycie jednego z przeciążeń konstruktora.

✔️ KONIECZNIE użyj value dla nazwy niejawnego parametru wartości ustawników właściwości.

NullReferenceException, IndexOutOfRangeException i AccessViolationException

❌ Nie zezwalaj publicznie wywoływanym interfejsom API jawnie lub niejawnie zgłaszać NullReferenceException, AccessViolationExceptionlub IndexOutOfRangeException. Te wyjątki są zarezerwowane i zgłaszane przez silnik wykonawczy, a w większości przypadków wskazują na błąd w oprogramowaniu.

Wykonaj sprawdzanie argumentów, aby uniknąć zgłaszania tych wyjątków. Zgłaszanie tych wyjątków uwidacznia szczegóły implementacji metody, które mogą ulec zmianie w czasie.

StackOverflowException

❌ Nie zgłaszaj jawnie StackOverflowException. Wyjątek powinien być jawnie zgłaszany tylko przez CLR.

❌ NIE przechwytuj StackOverflowException.

Napisanie kodu zarządzanego, który pozostaje spójny w przypadku dowolnych przepełnień stosu, jest prawie niemożliwe. Niezarządzane części środowiska CLR pozostają spójne, używając sond do przenoszenia sytuacji przepełnienia stosu do jasno zdefiniowanych lokalizacji zamiast wycofywania się z nieokreślonych sytuacji przepełnienia stosu.

OutOfMemoryException

❌ Nie zgłaszaj jawnie OutOfMemoryException. Ten wyjątek ma być rzucany wyłącznie przez infrastrukturę CLR.

ComException, SEHException i ExecutionEngineException

❌ NIE zgłaszaj jawnie COMException, ExecutionEngineException ani SEHException. Te wyjątki mają być zgłaszane tylko przez infrastrukturę CLR.

© Części 2005, 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone.

Przedrukowane za zgodą Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition przez Krzysztofa Cwalinę i Brada Abramsa, opublikowane 22 października 2008 przez Addison-Wesley Professional w ramach serii Microsoft Windows Development.

Zobacz także