Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 31028|Atsakyti: 1

[Šaltinis] .ctor ir .cctor iš .net

[Kopijuoti nuorodą]
Paskelbta 2017-04-06 14:56:38 | | | |
.ctor yra žinomas visiems

.cctor nėra pažįstamas ir gali būti lengvai piktnaudžiaujama

Vadinamasis .cctor yra statinis konstruktorius C# sintaksėje

Forma panaši į




.cctor ir .ctor panašumai ir skirtumai

   1. Negalite turėti prieigos teisių identifikatorių viešų, privačių ir t. t., kurių negalima naudoti, o tai skiriasi nuo .ctor

   2. Neturi būti grąžinamos reikšmės, kuri yra tokia pati kaip .ctor

   3. Negali būti parametrų, .ctor gali turėti kelis parametrus

   4. Gali būti tik vienas, ir turi būti bent vienas .ctor

   5. Programuotojas negali kontroliuoti .cctor skambučio laiko, tam tikra prasme programuotojas gali kontroliuoti jo skambučio laiką

   6. Programuotojai negali tiesiogiai iškviesti .cctor, .ctor Kai programuotojas naudoja naują operatorių, .ctor tikrai bus iškviestas


.cctor skambučio laikas:


    Statinis konstruktorius automatiškai iškviečiamas prieš sukuriant pirmąjį egzempliorių arba nurodant bet kurį statinį narį. (Tai originali citata MSDN)

    Akivaizdu, kad .cctor iškviečiamas tik vieną kartą tame pačiame programos domene, o ne iškviečiamas kiekvieną kartą, kai objektas yra instanciuojamas kaip .ctor

.cctor naudojimas

    Statiniai konstruktoriai naudojami bet kokiems statiniams duomenims inicijuoti arba konkrečioms operacijoms, kurias reikia atlikti tik vieną kartą, atlikti.


Pavyzdžiui:

Visas šis kodas yra kompiliuojamas Windows 7, palyginti su 2005 m. išleidimo režimu, o jei rezultatai skiriasi, apsvarstykite galimybę perjungti į atleidimo režimą ir bandyti dar kartą




Kompiliuokite šį kodo segmentą ir naudokite ILDISM, kad jį peržiūrėtumėte, metodų lentelė yra tokia



.ctor(): void // Tai yra kompiliatoriaus automatiškai pateiktos klasės egzemplioriaus konstruktorius

main():void(string[]) //Programos įėjimo taškas

Akivaizdu, kad rinkinyje nėra .cctor, o kompiliatorius automatiškai nepateiks .cctor funkcijų, kai klasė neturi statinių laukų, kuriuos reikia inicijuoti, o tai skiriasi nuo .ctor, kuris visada egzistuoja

Kodo modifikavimas




Sudarant šį kodą, bus įspėjimas, bet tai nėra svarbu, svarbu tai, kad žiūrint agregatą su ILDASTOM, laukiamas .cctor, statinis konstruktorius nepasirodo!


kas atsitiko?

Ar išvada neteisinga?. CCTOR nėra statinis laukas, naudojamas klasei inicijuoti?

Atsipalaiduokite, pažvelkite į kodą





Vienintelis skirtumas tarp šio kodo ir ankstesnio yra tas, kad jis keičia pradinę statinio lauko i vertę, o kitas dalykas yra stebuklingos akimirkos liudininkas

Leiskite DASM ir, mūsų nuostabai, labai prašomas .cctor pagaliau čia!



Pažvelkite į .cctor diegimo kodą ir pamatysite:

.method privatus hidebysig specialname rtspecialname statinis
        void .cctor() cil valdomas
{
  Kodo dydis 7 (0x7)
  .maxstack 8
  IL_0000: ldc.i4.1 // Sukurkite statinius laukus :-)
  IL_0001: stsfld int32 only_lonely. A::i
  IL_0006: ret
} // A metodo pabaiga::.cctor


Kodėl taip yra? Galima priežastis yra ta, kad numatytoji Int32 tipo reikšmė yra 0, o kompiliatorius tai aptinka ir optimizuoja, kad nesukurtų .cctor kodo

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

Galiausiai galime patys įdiegti .cctor funkciją, kad įgyvendintume specialius funkcinius reikalavimus

suvestinė
1、. ctor yra statybos metodas;
2、. cctor yra tipo iniciatorius, kuris yra statinis konstruktorius C#;
3. Kai C klasė yra instanciuojama, ji pirmiausia priskirs reikšmę laukui, kuris yra priskirtas deklaravimo metu, ir tada iškvies bazinės klasės konstruktorių, o tada sukonstruos save tokiu pačiu būdu, iki aukščiausio lygio System.Object, o tada grįš vykdyti kodą C aiškiu konstravimo metodu, kuris yra toks rekursinis procesas.





Ankstesnis:Bendrieji su kontekstu susieti objektai: ContextBoundObject ir bendrosios klasės nepalaikomos
Kitą:Klasės statinių, nestatinių ir konstruktyvių metodų vykdymo tvarkos suvestinė
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com