Quina diferència hi ha entre un constructor i un destructor en C #?


Resposta 1:

C # no té destructors, sinó que té finalitzadors, que és diferent.

Essencialment, un constructor és el que s'anomena amb la paraula clau "nova" i, en els llenguatges que en tenen, els anomenats destructors s'anomenen mitjançant la paraula clau "suprimir" (o quan l'objecte surti de l'abast).

D'altra banda, el col·leccionista s'anomena un finalitzador (un cop després que l'objecte s'apaga o l'abast) (tècnicament quan ja no hi ha més indicis que no són "fora d'àmbit).

Dues coses importants a destacar sobre els finalitzadors:

  • No teniu forma de saber exactament quan s’anomenarà. Heu d’anar amb compte amb el que feu en un finalitzador; altres objectes de la mateixa classe podrien haver estat recollits d’escombraries. Només heu de tocar les referències no gestionades en un finalitzador.

Si voleu / necessiteu quelcom més proper a un destructor de C #, teniu la interfície IDisposable, que us proporciona un mètode; "Eliminar".

C # té una paraula clau especial "utilitzant", que declara un objecte en un àmbit i garanteix que s'anomena el mètode Dispose.

Aquest mètode també hauria de disposar de qualsevol objecte identificable que posseeix la classe implentant.

Si la classe conserva algun objecte no gestionat, haureu de crear una sobrecàrrega del mètode Elimina que pren un paràmetre booleà. Aquest mètode ha de disposar de totes les referències no gestionades i, si el paràmetre bool és cert, també hauria de disposar de qualsevol objecte identificable. Aleshores, haureu de crear un finalitzador, que crida a Elimina (fals) per assegurar-se que s'allibereixen els recursos no gestionats en cas que no s'anomenés el mètode de disposició. El dispositiu normal de trucada hauria de trucar a Dispose (true) i també anomenar GC.SurpressFinalize (), ja que la finalització no serà necessària (això garanteix que l'objecte es recull a les escombraries amb més rapidesa i ajuda a prevenir errors al finalitzador)


Resposta 2:

Constructor i destructor són una funció membre especial de la classe en qualsevol llenguatge de programació com c # o Java. La funció sobre els membres està tenint el mateix nom que el nom de la classe i s'invoca quan creem un objecte d'una classe.

Bàsicament el constructor s'utilitza per inicialitzar les dades dels membres d'una classe i el destructor s'utilitza per destruir els objectes o alliberar les memòries ocupades per l'objecte.

Un dels usos reals en temps real del constructor és inicialitzar els membres de dades amb valors predeterminats i és per això que tenim constructor predeterminat.

Per exemple, cada vegada que creem un correu electrònic que vingués de qualsevol domini com Gmail, yahoo o Microsoft, obtenim alguns missatges de correu electrònic predeterminats a la nostra safata d'entrada, cosa que significa que aquests correus electrònics són valors predeterminats.

Per entendre-ho d’una manera millor, considereu Gmail com a classe.

classe Gmail
{
 missatge de cadena;
 public Gmail (nom d'usuari de la cadena)
 {
   message = "benvingut a Gmail" + Nom d'usuari
 }
}
En funció principal
Gmail g1 = nou Gmail ("Shinchan.gupta");
Gmail g2 = nou Gmail (“aching.gupta”);

Ara sempre que crearem un nou id de correu electrònic significa que estem creant un nou objecte de Gmail. I inicialitzarà els membres de les dades del missatge amb valors predeterminats per a tot l'objecte i és per això que cada usuari de gmail rep el mateix missatge a la safata d'entrada i quin és el correu electrònic predeterminat que podeu dir.

Ara hem creat dos objectes i conté assignació de memòria que s’hauria d’alliberar un cop s’executi el programa i per això tenim un destructor que també s’anomena automàticament i destruir els objectes per alliberar la memòria.

En paraules simples, quan utilitzeu constructor, s'assigna memòria i quan s'utilitza destructor s'allibera la memòria assignada.