Výnimkou je chyba, ktorá sa vyskytne za behu programu a ukončí normálny priebeh vykonávania programu, ak nie je spracovaná správne. Keď sa vyskytnú výnimky, možno nebudete chcieť používateľovi odhaliť skutočné trasovanie zásobníka alebo správu o výnimke. Vlastné výnimky sa dajú použiť na pridanie jasných, zmysluplných a užívateľsky príjemných informácií k výnimkám, keď sa vyskytnú chyby počas bežiaceho programu.
Základná trieda pre všetky výnimky v .Net je Výnimka
. Všetky triedy v hierarchii výnimiek pochádzajú priamo alebo nepriamo z tejto triedy. Všimnite si, že System.ApplicationException
a System.SystemException
triedy rozširujú System.Exception
triedy, ktorá je zase odvodená od System.Object
trieda. Upozorňujeme, že výnimky sú ako všetky ostatné typy v sieti .Net.
ApplicationException vs. System.Exception
Ak chcete vytvoriť vlastnú triedu výnimiek, mali by ste definovať typ. Pri navrhovaní vlastných tried výnimiek by ste mali svoju triedu odvodiť Systém. Výnimka
a nie z ApplicationException
. ApplicationException
bol pôvodne určený na použitie na vytvorenie používateľom definovaných výnimiek, ale jeho používanie sa už neodporúča. Ako sa uvádza v dokumentácii spoločnosti Microsoft:
Výnimka
triedy skôr akoApplicationException
trieda. Nemali by ste hádzaťApplicationException
výnimkou vo vašom kóde a nemali by ste chytiť znakApplicationException
výnimku, pokiaľ nemáte v úmysle pôvodnú výnimku znova vyhodiť.Dôvod ApplicationException
Zastarané je, že jeho použitie zbytočne rozširuje hierarchiu výnimiek. Napriek tomu ApplicationException
trieda rozširuje Výnimka
triedy, nepridáva novú funkcionalitu. Jeho jediným účelom bolo poskytnúť spôsob, ako rozlíšiť medzi výnimkami definovanými aplikáciami a výnimkami definovanými systémom.
Navrhovanie vlastnej triedy výnimiek
Poďme teraz kopať do nejakého kódu. Nasledujúci úryvok kódu ukazuje, ako môžete začať vytvárať vlastnú triedu výnimiek v C # odvodením System.Exception
trieda. Upozorňujeme, že svojej triede vlastných výnimiek by ste mali dať zmysluplný názov. V tomto príklade vytvoríme vlastnú triedu výnimiek s názvom LoginException,
ktoré možno použiť na zachytenie chýb, ktoré by sa mohli vyskytnúť pri prihlásení používateľa do systému, napríklad ak sú prihlasovacie údaje používateľa nesprávne.
verejná trieda LoginException: System.Exception{
//ROBIŤ
}
Nasledujúci zoznam kódov zobrazuje našu vlastnú triedu výnimiek s implementovanými predvolenými a argumentovými konštruktormi.
verejná trieda LoginException: System.Exception{
///
/// Predvolený konštruktor
///
verejná LoginException (): base ()
{
}
///
/ / / Konštruktor argumentu
///
/// Toto je popis výnimky
public LoginException (reťazcová správa): základná (správa)
{
}
///
/ / / Konštruktor argumentu s vnútornou výnimkou
///
/// Toto je popis výnimky
/// Vnútorná výnimka
public LoginException (reťazcová správa, výnimka innerException): base (message, innerException)
{
}
///
/ / / Konštruktor argumentov s podporou serializácie
///
/// inštancia SerializationInfo
/// inštancia StreamingContext
chránený LoginException (SerializationInfo info, StreamingContext kontext): základ (info, kontext)
{
}
}
Všimnite si použitie parametrov v konštruktore súboru Prihlasovacia výnimka
triedy a ako sa volajú konštruktory základnej triedy. Všimnite si tiež, ako sa používa posledný konštruktor argumentov na zabezpečenie podpory pre serializáciu.
Používanie vlastnej triedy výnimiek
Nasledujúci zoznam kódov ukazuje, ako môžete používať Prihlasovacia výnimka
triedy, ktorú sme práve implementovali.
static void Main (reťazec [] args){
skús
{
// Sem zadajte kód pre prihlásenie užívateľa.
// Ak sú zadané poverenia neplatné
// je vyhodený objekt výnimky.
hodiť novú LoginException („Poskytnuté neplatné poverenia ...“);
}
chytiť (LoginException loginException)
{
// Sem napíšete kód, aby ste zvládli výnimku
Console.WriteLine (loginException.Message);
}
Console.Read ();
}
Upozorňujeme, že vlastné triedy výnimiek by ste mali implementovať, iba ak chcete pridať viac funkcií do spracovania výnimiek vo svojich aplikáciách alebo ak má zmysel poskytnúť používateľovi ďalšie informácie. Vo väčšine prípadov sa budete chcieť spoľahnúť na štandardné výnimky, ktoré vám sieť .NET poskytuje.