Programovanie

Ako implementovať vlastnú triedu výnimiek v C #

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:

Mali by ste odvodiť vlastné výnimky zVý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.

$config[zx-auto] not found$config[zx-overlay] not found