Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 31028|Vastaus: 1

[Lähde] .ctor ja .cctor .net:stä

[Kopioi linkki]
Julkaistu 6.4.2017 14.56.38 | | | |
.ctor on kaikkien tuntema

.cctor ei ole tuttu ja sitä voidaan helposti käyttää väärin

Niin kutsuttu .cctor on staattinen konstruktori C#-syntaksissa

Muoto




Samankaltaisuudet ja erot .cctorin ja .ctorin välillä

   1. Et voi käyttää käyttöoikeustunnisteita julkisina, yksityisinä jne., joita ei voi käyttää, mikä eroaa .ctorista

   2. Palautusarvoa ei saa olla, mikä on sama kuin .ctorilla

   3. Parametreja ei voi olla, .ctorilla voi olla useita parametreja

   4. Enintään yksi voi olla yksi, ja vähintään yksi .ctor

   5. Ohjelmoija ei voi hallita .cctor-kutsun ajoitusta, ohjelmoija voi tavallaan ohjata kutsun ajoitusta

   6. Ohjelmoijat eivät voi kutsua suoraan .cctor- tai .ctor-tiedostoja Kun ohjelmoija käyttää uutta operaattoria, .ctor kutsutaan varmasti


.CCTOR-puhelun ajoitus:


    Staattinen konstruktori kutsutaan automaattisesti ennen kuin ensimmäinen instanssi luodaan tai mihin tahansa staattiseen jäseneen viitataan. (Tämä on alkuperäinen lainaus MSDN:llä)

    On selvää, että .cctor kutsutaan vain kerran samassa ohjelmadomainissa, eikä sitä kutsuta aina, kun objekti instansoidaan kuten .ctor.

.cctor-käyttö

    Staattisia konstruktoreita käytetään minkä tahansa staattisen datan alustamiseen tai tiettyjen toimintojen suorittamiseen, jotka tarvitsee suorittaa vain kerran.


Esimerkiksi:

Kaikki seuraava koodi on käännetty Windows 7:ssä verrattuna vuoden 2005 julkaisutilaan, ja jos tulokset ovat erilaiset, harkitse siirtymistä julkaisutilaan ja kokeile uudelleen




Käännä tämä koodisegmentti ja käytä ILDISM:ää sen tarkasteluun, metoditaulu on seuraava



.ctor(): void // Tämä on luokan instanssikonstruktori, jonka kääntäjä tarjoaa automaattisesti

Main():void(string[]) //Ohjelman aloituspiste

On selvää, että assemblerissa ei ole .cctor-tiedostoa, eikä kääntäjä automaattisesti tarjoa .cctor-funktioita, kun luokassa ei ole staattisia kenttiä, jotka täytyy alustaa, mikä eroaa .ctorista, joka on joka tapauksessa aina olemassa

Muokkaa koodia




Kun käännän tätä koodia, tulee varoitus, mutta se ei ole tärkeää, tärkeintä on, että kun katsoo assemblyä ILDASTOMilla, odotettua .cctor-staattista rakentajaa ei näy!


Mitä tapahtui?

Onko johtopäätös väärä?. Eikö CCTOR ole staattinen kenttä, jota käytetään luokan alustumiseen?

Ota rauhallisesti, katso koodia





Ainoa ero tämän koodin ja edellisen välillä on, että se muuttaa staattisen kentän i alkuarvoa, ja seuraavaksi nähdään taikahetki

Tehdään DASM, ja yllätykseksemme paljon toivottu .cctor on vihdoin täällä!



Katso .cctor-toteutuskoodia ja näet:

.method private hidebysig specialname rtspecialname static
        void .cctor() cil managed
{
  Koodikoko 7 (0x7)
  .maxstack 8
  IL_0000: ldc.i4.1 // Staattiset kentät :-)
  IL_0001: stsfld int32 only_lonely. V::i
  IL_0006: jää
} // metodin A::.cctor loppu


Miksi näin on? Mahdollinen syy on se, että Int32-tyypin oletusarvo on 0, ja kääntäjä havaitsee tämän ja optimoi sen niin, ettei tuota .cctor-koodia

viittaus
https://msdn.microsoft.com/zh-cn/library/k9x6w0hc(VS.80).aspx

Lopuksi voimme toteuttaa .cctor-funktion itse toteuttaaksemme erityisiä funktionaalisia vaatimuksia

yhteenveto
1、. CTOR on rakennusmenetelmä;
2、. cctor on tyyppialusto, joka on staattinen konstruktori C#:ssa;
3. Kun luokka C instansoituu, se antaa ensin arvon kentälle, joka on määritelty määrityksen hetkellä, ja kutsuu sitten perusluokan konstruktorin, ja rakentaa itsensä samalla tavalla aina ylimmälle tasolle System.Object, ja palaa sitten suorittamaan koodin C:n eksplisiittisessä rakennusmenetelmässä, joka on niin rekursiivinen prosessi.





Edellinen:Yleiset kontekstisidonnaiset objektit: ContextBoundObject ja geneeriset luokat eivät ole tuettuja
Seuraava:Yhteenveto staattisten, ei-staattisten ja konstruktiivisten menetelmien suoritusjärjestyksestä luokassa
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com