Destruktoriai C# naudojami retai, todėl daugelis žmonių apie juos pamiršo, nors jie mažai naudingi ir nenaudingi mokytis.
Vienas. Destruktorių charakteristikos:
Destruktoriai gali egzistuoti tik klasėse, o ne struktūrose; Destruktorius negali turėti jokių modifikatorių, įskaitant prieigos kontrolės modifikatorius, statinius modifikatorius, abstrakčius modifikatorius, virtualius modifikatorius ir kt.; Destruktorius neturi parametrų, o tai reiškia, kad negali būti perkrovos.
Du. Kada paskambinti destruktoriui:
Destruktorius vadinamas, kai daiktą perdirba šiukšlių surinkėjas, tačiau šiukšlių surinkėjas turi savybę, jis yra tingus, Jis neperdirba kintamojo iš karto po to, kai jis išeina iš taikymo srities ir gyvavimo laiko, bet tik tada, kai mano, kad tai tinkama, paprastai kai atmintis yra įtempta. Pavyzdžiui:
Po btn_Click grąžinimo metodo de turėtų būti nutrauktas, tačiau jo destruktorius nevadinamas, nurodant, kad šiukšlių surinkėjas jo neperdirbo; Uždarius formą, vykdomas destruktorius, nurodantis, kad programos pabaigoje šiukšlių surinkėjas nenoriai priverstas ją perdirbti (^-^). Žinoma, galime paskambinti GC.Collect(), kad priverstume perdirbti:
Spustelėjus btn1, de1 ir naujas Demo() nutraukiami ir iškviečiamas destruktorius. de2 dar nepasibaigė savo gyvavimo laikas, todėl net jei bus vadinamas GC.Collect metodas, jis nebus perdirbamas; kai btn1_Click grįžta, de2 pasibaigė savo gyvavimo laikas, tačiau dėl šiukšlių surinkėjo tingumo jis vis tiek nėra perdirbamas; Tik tada, kai btn2 iškviečia GC.Collect metodą, de2 susigrąžinamas ir jo destruktorius iškviečiamas.
Vienas iš būdų užkirsti kelią destruktoriaus iškvietimams yra įdiegti IDisposable sąsają, kuri apibrėžia unikalų metodą: Dispose(). Tai neleidžia destruktoriui iškviesti viduje, o tai reiškia, kad jei jums nuobodu, galite įdiegti šią sąsają nekviesdami GC.SuppressFinalize(^-^), o tai beprasmiška, nes neblokuoja destruktoriaus:
Dabar de1 naikintojas nebus kviečiamas.
Trys. Destruktoriaus esmė:
Destruktorius iš esmės yra metodas, kuris yra toks:
Paprastai mes manome, kad destruktorius gali iškviesti tik sistema, o ne patys programuotojai, tačiau tai nėra visiškai tiesa, o destruktorius taip pat galima vadinti aiškiai, juk tai tik metodas:
Destruktoriai nereikalingi, nebent klasėje atidaryti nevaldomi ištekliai
|