Hver er munurinn á framkvæmdaaðila og eyðileggjandi í C #?


svara 1:

C # hefur enga eyðileggjandi, heldur aðra lokahönd.

Í meginatriðum er smíði kallaður með „nýja“ lykilorðinu og á tungumálum sem nota „eyða“ lykilorðinu eru eyðileggjendur kallaðir eftir „eyða“ lykilorðinu (eða þegar hluturinn fer úr gildi).

Lokaverkefni er aftur á móti kallað af sorphirðunni nokkru eftir að hlutnum eða umfanginu hefur verið eytt (tæknilega séð, ef það eru ekki fleiri ábendingar sem eru ekki utan verksviðsins).

Tvær mikilvægar athugasemdir um frágang:

  • Þú getur ekki vitað nákvæmlega hvenær það verður hringt. Þú verður að vera varkár hvað þú gerir í lokaumferð - aðrir hlutir úr sama flokki hafa þegar verið safnað saman. Þú ættir bara að snerta óviðráðanlegar tilvísanir í lokaumferð.

Ef þú vilt / þarft að komast nær eyðileggjandi í C #, hefurðu IDisposable viðmótið sem býður upp á aðferð. „Fargið“.

C # er með sérstakt lykilorð „að nota“ sem lýsir yfir hlut innan sviðs og tryggir að ráðstafaðferðin sé kölluð.

Þessi aðferð ætti einnig að farga öllum auðlindanlegum hlutum sem tilheyra framkvæmdarflokknum.

Ef bekkurinn þinn inniheldur óviðráðanlega hluti ættirðu að búa til ofhleðslu ráðstafaaðferðar sem tekur Boolean breytu. Þessi aðferð ætti að eyða öllum óbreyttum tilvísunum. Ef færibreytugallinn er réttur, ætti einnig að eyða öllum auðlindum hlutum. Þú ættir síðan að búa til lokaverkefni sem kallar ráðstafa (ósatt) til að tryggja að óviðráðanlegt fjármagn sé sleppt ef ráðstafaðferðin hefur aldrei verið kölluð. Venjulegur farga ætti að kalla Farga (satt) og einnig GC.SurpressFinalize (), þar sem frágang er ekki nauðsynleg (þetta tryggir að sorp hlutarins safnast hraðar saman og hjálpar til við að forðast villur í lokaranum).


svara 2:

Framkvæmdaraðilinn og eyðilaginn eru sérstök aðgerðir í bekknum með hvaða forritunarmáli sem er, svo sem C # eða Java. Þessi félagaaðgerð hefur sama nafn og bekkjarnafnið og kallast þegar við búum til hlut af bekknum.

Í grundvallaratriðum er framkvæmdaaðilinn notaður til að frumstilla gagnaþátta í bekknum og eyðileggjandi er notaður til að eyða hlutunum eða til að losa um minni sem hluturinn notar.

Framkvæmdastjóri er notaður í rauntíma til að frumstilla gagnaþátta með sjálfgefnum gildum. Af þessum sökum höfum við venjulegan framkvæmdaaðila.

Til dæmis þegar við búum til tölvupóst sem tilheyrir léni eins og Gmail, Yahoo eða Microsoft, birtast einhver venjuleg tölvupóstur í pósthólfinu okkar. Þetta þýðir að þessi tölvupóstur er sjálfgefið gildi.

Til að skilja þetta betur skaltu líta á Gmail sem bekk.

Class Gmail {strengjaboð; opinber Gmail (strengur notandanafn) {message = "Velkomin (n) í Gmail" + notandanafn}} Í aðalaðgerðinni Gmail g1 = nýtt Gmail ("Shinchan.gupta"); Gmail g2 = nýtt Gmail ("aching.gupta");

Þegar við búum til nýtt tölvupóstskilríki þýðir það að við erum að búa til nýjan hlut fyrir Gmail. Að auki eru meðlimir skeytagagnanna frumstilla með sjálfgefnum gildum fyrir alla hluti. Af þessum sökum fær hver notandi Gmail sömu skilaboð í pósthólfinu. Þetta er venjulegur tölvupóstur sem þú getur sagt.

Nú höfum við búið til tvo hluti og það inniheldur minniúthlutun sem ætti að gefa út um leið og forritið keyrir. Til þess höfum við eyðileggingu sem einnig er kallaður sjálfkrafa og eyðileggur hluti til að losa um minni.

Á einfaldan hátt, þegar þú notar framkvæmdaaðila, er minni úthlutað og þegar þú notar eyðileggjandi, losnar úthlutað minni.