Poikkeuksena on virhe, joka tapahtuu ajon aikana ja lopettaa ohjelman normaalin suorituksen, jos sitä ei käsitellä oikein. Kun tapahtuu poikkeuksia, et halua paljastaa todellista pinon jäljitystä tai poikkeussanomaa käyttäjälle. Mukautettujen poikkeusten avulla voidaan lisätä selkeitä, mielekkäitä ja käyttäjäystävällisiä tietoja poikkeuksiin, kun virheitä esiintyy ohjelman ollessa käynnissä.
Kaikkien .Net-verkon poikkeusten perusluokka on Poikkeus
. Kaikki poikkeushierarkian luokat ovat suoraan tai epäsuorasti peräisin tästä luokasta. Huomaa, että System.ApplicationException
ja System.SystemException
luokat jatkavat Järjestelmä, poikkeus
luokka, joka puolestaan on johdettu Järjestelmä Objekti
luokassa. Huomaa, että poikkeukset ovat aivan kuten kaikki muutkin .Net-tiedostot.
ApplicationException vs. System.Exception
Voit luoda mukautetun poikkeusluokan määrittämällä tyypin. Suunnitellessasi mukautettuja poikkeusluokkia sinun tulisi johtaa luokkasi Järjestelmä, poikkeus
eikä ApplicationException
. ApplicationException
oli alun perin tarkoitettu käytettäväksi käyttäjän määrittelemien poikkeusten luomiseen, mutta sen käyttöä ei enää suositella. Kuten Microsoftin asiakirjoissa todetaan:
Poikkeus
luokan sijaanApplicationException
luokassa. Sinun ei pitäisi heittääApplicationException
poikkeus koodissasi, eikä sinun pitäisi saada kiinniApplicationException
poikkeus, ellet aio heittää alkuperäistä poikkeusta uudelleen.Syy ApplicationException
on vanhentunut, on se, että sen käyttö turhaa poikkeus hierarkian laajentamista. vaikkakin ApplicationException
luokka laajentaa Poikkeus
luokassa, se ei lisää uusia toimintoja. Sen ainoa tarkoitus oli tarjota tapa erottaa sovellusten määrittelemät poikkeukset järjestelmän määrittelemistä poikkeuksista.
Mukautetun poikkeusluokan suunnittelu
Kaivetaan nyt koodiin. Seuraava koodinpätkä osoittaa, kuinka voit aloittaa mukautetun poikkeusluokan luomisen C #: ssä johtamalla Järjestelmä, poikkeus
luokassa. Huomaa, että sinun tulee antaa mielekäs nimi mukautetulle poikkeusluokalle. Tässä esimerkissä luomme mukautetun poikkeusluokan nimeltä Kirjaudu sisäänPoikkeus,
jota voidaan käyttää virheiden ansaitsemiseen, joita saattaa ilmetä, kun käyttäjä kirjautuu järjestelmään, esimerkiksi jos käyttäjän tunnistetiedot ovat virheelliset.
julkinen luokka LoginException: System.xxeption{
//TEHDÄ
}
Seuraava koodiluettelo näyttää mukautetun poikkeusluokan, jossa oletus- ja argumenttirakentajat on toteutettu.
julkinen luokka LoginException: System.xxeption{
///
/// Oletusrakentaja
///
julkinen kirjautuminenException (): base ()
{
}
///
/// Argumenttirakentaja
///
/// Tämä on poikkeuksen kuvaus
public LoginException (merkkijono-viesti): pohja (viesti)
{
}
///
/// Argumenttirakentaja sisäistä poikkeusta lukuun ottamatta
///
/// Tämä on poikkeuksen kuvaus
/// Sisäinen poikkeus
public LoginException (merkkijono-viesti, Exception innerException): pohja (viesti, innerException)
{
}
///
/// Argumenttirakentaja, sarjoitustuki
///
/// SerializationInfo-esiintymä
/// StreamingContext-instanssi
suojattu LoginException (SerializationInfo-tiedot, StreamingContext-konteksti): pohja (tiedot, konteksti)
{
}
}
Huomaa parametrien käyttö Kirjaudu sisäänPoikkeus
luokka ja miten perusluokan rakentajia kutsutaan. Huomaa myös, kuinka viimeistä argumenttirakentajaa käytetään sarjoituksen tukemiseen.
Käyttämällä mukautettua poikkeusluokkaa
Seuraava koodiluettelo näyttää, kuinka voit käyttää Kirjaudu sisäänPoikkeus
luokka, jonka juuri toteutimme.
staattinen void Main (merkkijono [] args){
yrittää
{
// Kirjoita koodi kirjautumalla sisään käyttäjälle.
// Jos annetut kirjautumistiedot ovat virheellisiä
// poikkeusobjekti heitetään.
heittää uusi LoginException ("Virheelliset tunnistetiedot ...");
}
saalis (LoginException loginException)
{
// Kirjoita koodi tähän käsittelemään poikkeusta
Console.WriteLine (loginException.Message);
}
Konsoli.Lue ();
}
Huomaa, että mukautettuja poikkeusluokkia tulisi ottaa käyttöön vain, kun haluat lisätä sovellusten poikkeusten käsittelyyn enemmän toimintoja tai kun on järkevää antaa käyttäjälle lisätietoja. Useimmissa tapauksissa kannattaa luottaa tavallisiin poikkeuksiin .Net antaa sinulle.