Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 31028|Odgovoriti: 1

[Vir] .ctor in .cctor .net

[Kopiraj povezavo]
Objavljeno na 6. 04. 2017 14:56:38 | | | |
.ctor je znan vsem

.cctor ni znan in ga je mogoče zlahka napačno uporabiti

Tako imenovani .cctor je statični konstruktor v C# sintaksi

Oblika kot




Podobnosti in razlike med .cctor in .ctor

   1. Ne morete imeti identifikatorjev dostopnih pravic javnih, zasebnih itd., ki jih ni mogoče uporabljati, kar je drugače kot .ctor

   2. Ne sme biti vrnjene vrednosti, ki je enaka kot .ctor

   3. Parametrov ne more biti, .ctor lahko vsebuje več parametrov

   4. Lahko je največ eden, in mora biti vsaj en .ctor

   5. Programer ne more nadzorovati časa klica .cctor, v nekem smislu lahko programer nadzoruje čas klica

   6. Programerji ne morejo neposredno klicati .cctor, .ctor Ko programer uporabi novega operatorja, bo .ctor zagotovo poklican


.cctor čas klicev:


    Statični konstruktor se samodejno pokliče pred ustvarjanjem prve instance ali pred referenco kateregakoli statičnega člana. (To je izvirni citat na MSDN)

    Jasno je, da se .cctor kliče le enkrat v isti programski domeni, ne pa vsakič, ko se objekt instancira, kot je .ctor

.cctor uporaba

    Statični konstruktorji se uporabljajo za inicializacijo statičnih podatkov ali za izvajanje specifičnih operacij, ki jih je treba izvesti le enkrat.


Na primer:

Vsa naslednja koda je prevedena v Windows 7, v primerjavi z načinom izdaje iz leta 2005, in če so rezultati drugačni, razmislite o prehodu v način izdaje in poskusu znova




Prevedite ta del kode in nato uporabite ILDISM za ogled, tabela metod je naslednja



.ctor(): void // To je konstruktor instanc razreda, ki ga samodejno zagotovi prevajalnik

Main():void(string[]) //Vstopna točka programa

Očitno v asemblerju ni .cctorja, prevajalnik pa ne bo samodejno zagotovil .cctor funkcij, kadar razred nima statičnih polj, ki jih je treba inicializirati, kar je drugače kot .ctor, ki tako ali tako vedno obstaja

Spremenite kodo




Pri prevajanju te kode se pojavi opozorilo, vendar to ni pomembno, pomembno je, da se pri ogledu sestavljanja z ILDASTOM-om pričakovani .cctor, statični konstruktor, ne pojavi!


kaj se je zgodilo?

Ali je sklep napačen? CCTOR ni statično polje, ki se uporablja za inicializacijo razreda?

Umiri se, prosim, poglej kodo





Edina razlika med to kodo in prejšnjo je, da spremeni začetno vrednost statičnega polja i, nato pa je opazovanje čarobnega trenutka

Naredimo ga DASM, in na naše presenečenje je končno tukaj dolgo želeni .cctor!



Poglejte implementacijsko kodo .cctor in videli boste:

.method private hidebysig specialname rtspecialname static
        void .cctor() cil managed
{
  Velikost kode 7 (0x7)
  .maxstack 8
  IL_0000: ldc.i4.1 // Vzpostavi statična polja :-)
  IL_0001: stsfld int32 only_lonely. A::i
  IL_0006: upokojeni
} // konec metode A::.cctor


Zakaj je temu tako? Možen razlog je, da je privzeta vrednost tipa Int32 0, prevajalnik pa to zazna in optimizira, da ne ustvari .cctor kode

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

Nazadnje lahko sami implementiramo .cctor funkcijo za implementacijo posebnih funkcionalnih zahtev

Povzetek
1、. CTOR je metoda konstrukcije;
2、. cctor je inicializator tipov, ki je statični konstruktor v C#;
3. Ko je razred C instanciran, najprej dodeli vrednost polju, ki je dodeljeno ob deklaraciji, nato pokliče konstruktorja osnovnega razreda, nato se konstruira na enak način, vse do najvišjega System.Object, nato pa se vrne, da izvede kodo v eksplicitni metodi gradnje C, ki je tak rekurziven proces.





Prejšnji:Generični objekti, vezani na kontekst: ContextBoundObject in generični razredi niso podprti
Naslednji:Povzetek vrstnega reda izvajanja statičnih, nestatičnih in konstruktivnih metod v razredu
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com