Diferența dintre aruncarea () și finalizarea () în C #

Autor: Laura McKinney
Data Creației: 2 Aprilie 2021
Data Actualizării: 13 Mai 2024
Anonim
Diferența dintre aruncarea () și finalizarea () în C # - Tehnologie
Diferența dintre aruncarea () și finalizarea () în C # - Tehnologie

Conţinut


Metodele dispune () și finalize () sunt metodele lui C # care sunt invocate pentru a elibera resursele neadministrate deținute de un obiect. Metoda dispose () este definită în interiorul interfeței IDisposable, în timp ce, metoda finalize () este definită în interiorul obiectului clasei. Principala diferență între a dispune () și a finaliza () este că metoda dispune() trebuie invocat în mod explicit de către utilizator, întrucât, metoda finalize () este invocat de colectorul de gunoi, chiar înainte ca obiectul să fie distrus. Să studiem câteva alte diferențe între ele cu ajutorul unui grafic de comparație prezentat mai jos.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațiearunca ()finaliza ()
DefinitMetoda dispune () este definită în interfața interfață IDispozabilă.Metoda finalize () id definită în clasa java.lang.object.
Sintaxăpublic void Eliminați () {
// Eliminați codul aici
}
protected void finalize () {
// cod de finalizare aici
}
invocat Metoda de a dispune () este invocată de utilizator.Metoda finalize () este invocată de colectorul de gunoi.
ScopMetoda de a dispune () este utilizată pentru a elibera resurse neadministrate ori de câte ori este invocată.Metoda finalize () este utilizată pentru a elibera resurse neadministrate înainte ca obiectul să fie distrus.
Punerea în aplicareMetoda dispose () trebuie să fie implementată ori de câte ori există o metodă apropiată ().Metoda finalize () urmează să fie implementată pentru resurse neadministrate.
Specificator de accesMetoda de a dispune () este declarată publică.Metoda finalize () este declarată ca fiind privată.
Acțiune Metoda de a dispune () este mai rapidă și dispune instantaneu un obiect.Metoda de finalizare este mai lentă în comparație cu aruncarea
PerformanţăMetoda dispune () efectuează acțiunea instantanee deci, nu afectează performanța site-urilor web. Metoda de finalizare () fiind mai lent afectează performanțele site-urilor web.


Definiția dispose ()

Metoda dispose () eliberează resursele neadministrate care sunt deținute de un obiect al clasei. Resursele neadministrate sunt fișiere, conexiuni de date, etc. Metoda dispune () este declarată în interfață IDisposeable și este implementat de către clasă prin implementarea interfeței IDispozabile. Această metodă nu se numește automat. Programatorul trebuie să îl implementeze manual atunci când creați o clasă personalizată care va fi folosită de alții. Metoda are următoarea sintaxă:

public void dispose () {// Eliminați codul aici}

În sintaxa de mai sus, puteți observa că metoda este declarată publică. Se datorează faptului că această metodă este definită în interfața IDispozabilă și trebuie să fie implementată de clasa care implementează această interfață. Deci, pentru a oferi accesibilitate la clasa de implementare, metoda este declarată publică.

Această metodă este invocată manual de codul unui program, deoarece este implementată pentru a invoca. Performanța metodelor este rapidă și eliberează instantaneu resursele deținute de obiectul unei clase.


Definiția finalize ()

Metoda finalize () este definită în obiect clasă. Este utilizat pentru activități de curățare. Această metodă este numită de către colectorul de gunoi atunci când referința unui obiect nu este folosită mult timp. Colectorul de gunoi eliberează automat resursele gestionate, dar dacă doriți să eliberați resursele neadministrate, cum ar fi gestionarea fișierelor, conexiunea de date etc., metoda de finalizare trebuie implementată manual. Colectorul de gunoi invocă metoda finalizare () chiar înainte de a distruge obiectul complet.

Sintaxa metodei finalizează ():

protected void finalize () {// cod de finalizare aici}

În sintaxa de mai sus, metoda finalize () este declarată protejată. Motivul care stă la baza acestui lucru este că metoda finalizată () nu trebuie să fie accesibilă din afara clasei și trebuie să fie accesibilă numai colectorului de gunoi.

Metoda finalize () afectează costul performanței, deoarece nu eliberează memoria instantaneu. În C #, metoda de finalizare se numește automat cu distrugătoare.

  1. Metoda dispune () este definită într-o interfață IDisposable. Pe de altă parte, metoda finalize () este definită în clasă obiect.
  2. Metoda de a dispune () trebuie invocată manual în interiorul codului de către un programator, în timp ce finalizarea metodei este invocată automat de colectorul de gunoi înainte de a distruge obiectul.
  3. Metoda de aruncare ar putea fi invocată oricând, în timp ce metoda finalizată este invocată de colectorul de gunoi atunci când constată că acel obiect nu a fost făcut referire de multă vreme.
  4. Metoda dispose () este implementată într-o clasă după implementarea interfeței IDisposable. Metoda finalize () trebuie implementată numai pentru resurse neadministrate deoarece resursele gestionate sunt eliberate automat de colectorul de gunoi.
  5. Specificatorul de acces al metodei dispose () este public, așa cum este definit în interfața IDispozabilă și ar fi implementat de clasa care implementează această interfață, deci ar trebui să fie public. Pe de altă parte, metoda finalize () are specificator de acces protejat, astfel încât acesta să nu fie accesibil pentru niciun membru din afara clasei.
  6. Metoda de a dispune () este rapidă și eliberează obiectul instantaneu, deci nu afectează costurile de performanță. Metoda finalize () este mai lentă și nu eliberează instantaneu resursele deținute de obiect.

Concluzie:

Se recomandă utilizarea metodei dispune () peste metoda finalize (), deoarece este mai rapid decât finalizarea. De asemenea, poate fi apelat oricând, când este nevoie.