Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 20506|Atbildi: 1

[Avots] C# Deep Dive - Iznīcinātāji

[Kopēt saiti]
Publicēts 17.08.2018 13:54:43 | | |
Iznīcinātāji tiek reti izmantoti C#, tāpēc daudzi cilvēki par tiem ir aizmirsuši, lai gan tie ir maz noderīgi un ir bezjēdzīgi pētīt.

Viens.        Iznīcinātāju raksturojums:

Iznīcinātāji var pastāvēt tikai klasēs, nevis struktūrās; Iznīcinātājam nevar būt nekādi modifikatori, ieskaitot piekļuves kontroles modifikatorus, statiskos modifikatorus, abstraktus modifikatorus, virtuālos modifikatorus utt.; Destruktoram nav parametru, kas nozīmē, ka nevar būt pārslodzes.

Divi.        Kad zvanīt destruktoram:

Iznīcinātāju izsauc, kad objektu pārstrādā atkritumu savācējs, bet atkritumu savācējam ir īpašība, tas ir slinks,
Tas nepārstrādā mainīgo tūlīt pēc tam, kad tas ir atstājis darbības jomu un kalpošanas laiku, bet tikai tad, ja tas uzskata, ka tas ir piemērots, parasti, kad atmiņa ir saspringta. Piemēram:

Pēc atgriešanās metodes btn_Click de ir jāpārtrauc, bet tā iznīcinātājs netiek izsaukts, norādot, ka atkritumu savācējs to nav pārstrādājis; Aizverot veidlapu, tiek izpildīts destruktors, norādot, ka programmas beigās atkritumu savācējs ir negribīgi spiests to pārstrādāt (^-^).
Protams, mēs varam izsaukt GC.Collect(), lai piespiestu pārstrādi:

Noklikšķinot uz btn1, de1 un jauns Demo() tiek pārtraukts un iznīcinātājs tiek izsaukts.
de2 vēl nav beidzies kalpošanas laiks, tāpēc pat tad, ja tiek izsaukta GC.Collect metode, tā netiks pārstrādāta; kad btn1_Click atgriežas, de2 ir beidzies kalpošanas laiks, bet atkritumu savācēja slinkuma dēļ tas joprojām netiek pārstrādāts; Tikai tad, kad btn2 izsauc GC.Collect metodi, de2 tiek atgūts un tā iznīcinātājs tiek izsaukts.

Viens no veidiem, kā novērst destruktora izsaukumus, ir ieviest IDisposable interfeisu, kas definē unikālu metodi: Dispose().
Tas novērš iznīcinātāja izsaukšanu iekšēji, kas nozīmē, ka, ja jums ir garlaicīgi, varat ieviest šo saskarni, neizsaucot GC.SuppressFinalize(^-^), kas ir bezjēdzīgi, jo tas nebloķē destruktoru:

Tagad de1 iznīcinātājs netiks izsaukts.

Trīs.        Iznīcinātāja būtība:

Destruktors būtībā ir metode, kas izpaužas šādi:

Parasti mēs domājam, ka destruktorus var izsaukt tikai sistēma, nevis paši programmētāji, bet tas nav pilnīgi taisnība, un destruktorus var saukt arī skaidri, galu galā tā ir tikai metode:

Iznīcinātāji nav nepieciešami, ja klasē nav atvērti nepārvaldīti resursi





Iepriekšējo:C# Atšķirīgi nosacīti dedublē objektus
Nākamo:Izņēmuma ziņojums: "StrongTypingException: IsPrima...
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com