Clase de excepție în Delphi, delphi, delphi components, delphi sources

Clasele de excepție din Delphi

Clasele de excepție sunt denumite începând cu litera "E", iar clasa de bază este pur și simplu numită Excepție. Această clasă de bază conține funcționalitatea necesară pentru moștenirea tuturor obiectelor de eroare. Aici puteți selecta proprietatea Mesaj. care conține un mesaj de eroare și funcții pentru lucrul cu fișierul de ajutor, prin care puteți apela fișierul de ajutor cu o descriere a erorii care a avut loc.







În biblioteca VCL, un număr destul de mare de clase pentru diferite tipuri de erori sunt predefinite și toți sunt moștenitori ai Excepției. De exemplu, clasa EinOutError corespunde unei erori I / O. Astfel de erori apar la accesarea discurilor.

Când apare o eroare, se creează un obiect care este moștenitorul clasei care corespunde tipului de eroare. Deci, dacă a apărut o eroare I / O, va fi creată o instanță a clasei EinOutError.

Să analizăm exemplul din Lista 8.10, unde încerc să împart numărul în zero în blocul de manipulare a erorilor, ceea ce este interzis. Rezultatul diviziunii este stocat în variabila t. Rețineți că după aceasta fac un test dacă. Această verificare este absolut lipsită de sens și adăugată numai astfel încât, după divizare, există cel puțin o referință la variabila. Dacă nu există apel, Delphi vede inutilitatea diviziei și optimizatorul nu o face.

t, r: dublu; începe încercați r: = 0; t: = 10 / r; dacă t> 0 atunci ieșim; cu excepția
// manipularea erorii intrări-ieșiri

pe EinOutError începe

ShowMessage ("eroare I / O"); se încheie;

// divide la zero

EZeroDivide începe.

ShoWMessage ("Ei bine, nu poți împărți cu zero" + E.Message); se încheie; // Altfel

ShowMessage ("Nu am înțeles ce sa întâmplat, dar sa întâmplat ceva");

În acest caz, cu excepția blocului, există două unități de procesare cu diferite tipuri de erori. Pentru a verifica dacă a apărut o eroare I / O, scrieți următorul bloc:

pe [variabilă. ] clasa de eroare nu începe

// sfârșitul erorii I / O;

Dacă traduceți literalmente ceea ce este scris aici, acesta va arăta astfel: în caz de eroare, executați codul între început și sfârșit. Observați că am inclus variabila în paranteze pătrate. Aceasta înseamnă că variabila nu trebuie să fie pornită, ceea ce facem atunci când gestionăm o eroare I / O:

pe EInOutError nu începe

Fără defecte ("eroare I / O"); se încheie;







În cazul unei erori, se numește funcția showMessage, care afișează o casetă de dialog cu un mesaj specificat ca parametru.

Și acum, să ne uităm la modul în care rezolvăm eroarea de divizare cu zero:

pe e: EZeroDivide nu începe

ShowMessage ("Ei bine, nu poți împărți cu zero" + E.Message); se încheie;

Eroarea de divizare cu zero corespunde cu clasa EZeroDivide. Înainte de clasa de eroare, este scrisă o variabilă numită e. Prin aceasta vom putea afla mesajul de eroare, de exemplu e.Message.

În plus, în blocul excepțional din Listing 8.10, există încă cuvântul cheie, ca și în operația logică. Rețineți că există o punct și virgulă imediat după ce altceva, deși știm că nu este necesar să fie setat. Nu este necesar decât pentru operațiile logice. În acest caz, altceva este folosit pentru a face față excepțiilor, iar operația după acest cuvânt cheie va fi executată dacă eroarea nu a fost procesată înainte. Aceasta înseamnă că, în cazul în care a apărut o eroare care nu a fost gestionată de blocul on, codul va fi executat după altceva.

Deci, încercați să creați o nouă cerere, l-au pus pe buton, și apăsați-l pentru a scrie codul în Listarea 8.10. Rulați exemplul și faceți-l mai bine de la Delphi. Acum încercați să apăsați butonul. O eroare va avea loc, și Delphi intercepteaza managementul, arată linia de cod în cazul în care a avut loc o excepție, și afișează o casetă de dialog cu un mesaj care descrie eroarea.

După ce ați inspectat linia de cod în care a apărut eroarea, apăsați tasta . pentru a continua programul. În acest moment, controlul va fi transferat în programul nostru și veți vedea un mesaj pe care îl afișăm folosind funcția ShowMessage În blocul excepțional.

Dacă rulați programul nu de la Delphi. iar fișierul executabil creat în Delphi a fost activat de la managerul de fișiere. atunci la momentul erorii ați vedea numai al doilea mesaj pe care îl afișăm folosind funcția SenMessage.

Mesajele pot fi generate nu numai de mediul executabil, ci și manual. Pentru a genera mesajul dvs., utilizați instrucțiunea de ridicare. După această declarație, trebuie să specificați obiectul de eroare. Este un obiect, adică o instanță a unei anumite clase de erori.

Să vedem cum puteți genera manual o eroare I / O. Pentru a crea un obiect nou din această clasă, trebuie să apelați metoda de creare și această metodă este trecut printr-un mesaj care va fi afișat când evenimentul este declanșat.

Deci, constructorul de creare va returna o instanță a clasei de eroare I / O. Trebuie să specificăm după declarația de creare:

ridicați EinOutError.Create ("eroare I / O");

Puteți crea propria clasă de erori, puteți spori capacitățile sale, așa cum sufletul o dorește și o puteți folosi. Să vedem cum va arăta într-un exemplu. Să creăm o clasă numită MyException care va moșteni clasa de bază a tuturor erorilor - Excepție:

MyException = clasa (Excepție) publică

funcție MyException.GetSomeStr: String;

Rezultat: = 'Aceasta este linia mea';

Acum puneți butonul pe formular și scrieți-l cu următorul cod: încercați

ridicați MyException.Create ("Test"); cu excepția e: MyException nu

În secțiunea de încercare, generăm manual o eroare a propriului tip MyException. În secțiunea excepțională, interceptăm această eroare și folosim funcția ShowMessage pentru a afișa rezultatul funcției GetSomeStr. Deci, totul este simplu și frumos.

Ajutați proiectul! Spuneți prietenilor dvs. despre acest site:







Trimiteți-le prietenilor: