Výjimkou je chyba, ke které dochází za běhu a ukončuje normální tok provádění programu, pokud není správně zpracován. Když dojde k výjimkám, možná nebudete chtít uživateli odhalit skutečné trasování zásobníku nebo zprávu o výjimce. Vlastní výjimky lze použít k přidání jasných, smysluplných a uživatelsky přívětivých informací k výjimkám, když dojde k chybám během spuštění programu.
Základní třída pro všechny výjimky v .Net je Výjimka
. Všechny třídy v hierarchii výjimek jsou přímo nebo nepřímo odvozeny z této třídy. Všimněte si, že System.ApplicationException
a System.SystemException
třídy rozšiřují Výjimka systému
třída, která je zase odvozena od System.Object
třída. Všimněte si, že výjimky jsou jako všechny ostatní typy v .Net.
ApplicationException vs. System.Exception
Chcete-li vytvořit vlastní třídu výjimek, měli byste definovat typ. Při navrhování vlastních tříd výjimek byste měli odvodit svoji třídu Výjimka systému
a ne od ApplicationException
. ApplicationException
bylo původně zamýšleno k použití k vytvoření uživatelem definovaných výjimek, ale jeho používání se již nedoporučuje. Jak uvádí dokumentace společnosti Microsoft:
Výjimka
třída spíše nežApplicationException
třída. Neměli byste házetApplicationException
výjimku v kódu a neměli byste chytitApplicationException
výjimku, pokud nemáte v úmyslu znovu hodit původní výjimku.Důvod ApplicationException
bylo zastaralé je to, že jeho použití zbytečně rozšiřuje hierarchii výjimek. Ačkoliv ApplicationException
třída rozšiřuje Výjimka
třídy, nepřidává nové funkce. Jeho jediným účelem bylo poskytnout způsob, jak rozlišovat mezi výjimkami definovanými aplikacemi a výjimkami definovanými systémem.
Návrh vlastní třídy výjimek
Podívejme se nyní na nějaký kód. Následující fragment kódu ukazuje, jak můžete začít vytvářet vlastní třídu výjimek v C # odvozením Výjimka systému
třída. Všimněte si, že byste měli poskytnout smysluplný název vaší vlastní třídě výjimek. V tomto příkladu vytvoříme vlastní třídu výjimek s názvem Přihlašovací výjimka,
které lze použít k zachycení chyb, ke kterým může dojít při přihlášení uživatele do systému, např. pokud jsou přihlašovací údaje uživatele nesprávné.
veřejná třída LoginException: System.Exception{
//DĚLAT
}
Následující výpis kódu ukazuje naši vlastní třídu výjimek s implementovanými konstruktory výchozích a argumentů.
veřejná třída LoginException: System.Exception{
///
/// Výchozí konstruktor
///
public LoginException (): base ()
{
}
///
/// Konstruktor argumentů
///
/// Toto je popis výjimky
public LoginException (String message): base (message)
{
}
///
/// Konstruktor argumentů s vnitřní výjimkou
///
/// Toto je popis výjimky
/// Vnitřní výjimka
public LoginException (String message, Exception innerException): base (message, innerException)
{
}
///
/// Konstruktor argumentů s podporou serializace
///
/// Instance SerializationInfo
/// Instance of StreamingContext
chráněné LoginException (SerializationInfo info, StreamingContext kontext): base (info, kontext)
{
}
}
Všimněte si použití parametrů v konstruktoru Přihlašovací výjimka
class a jak se nazývají konstruktory základní třídy. Všimněte si také, jak se používá poslední konstruktor argumentů k poskytnutí podpory pro serializaci.
Použití vlastní třídy výjimek
Následující výpis kódu ukazuje, jak můžete používat Přihlašovací výjimka
třídy, kterou jsme právě implementovali.
static void Main (řetězec [] args){
Snaž se
{
// Sem napište kód pro přihlášení uživatele.
// Pokud jsou zadaná pověření neplatná
// je vyvolán objekt výjimky.
hodit novou LoginException („Neplatná pověření poskytnuta ...“);
}
catch (LoginException loginException)
{
// Sem napište kód pro zpracování výjimky
Console.WriteLine (loginException.Message);
}
Console.Read ();
}
Všimněte si, že byste měli implementovat vlastní třídy výjimek pouze v případě, že chcete do zpracování výjimek ve svých aplikacích přidat další funkce, nebo když má smysl poskytnout uživateli další informace. Ve většině případů se budete chtít spolehnout na standardní výjimky, které vám Net dává.