Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 31028|Válasz: 1

[Forrás] .ctor és .cctor a .net

[Linket másol]
Közzétéve 2017. 04. 06. 14:56:38 | | | |
.ctor mindenki számára ismert

.cctor nem ismerős, könnyen vissza lehet használni

Az úgynevezett .cctor egy statikus konstruktor a C# szintaxisban

Olyan alak, mint




Hasonlóságok és különbségek a .cctor és a .ctor között

   1. Nem lehet hozzáférési jogazonosítók nyilvános, privát stb., amelyek nem használhatók, ami eltér a .ctor-tól

   2. Nem lehet visszatérítési érték, ami ugyanaz, mint a .ctor

   3. Nem lehetnek paraméterek, a .ctornak több paramétere is lehet

   4. Legfeljebb egy lehet, és legalább egy .ctor kell lennie

   5. A programozó nem tudja irányítani a .cctor hívás időzítését, bizonyos értelemben a programozó irányíthatja a hívás időzítését

   6. A programozók nem hívhatják közvetlenül a .cctor-t, .ctor-t Ha a programozó az új operátort használja, a .ctor-t biztosan meghívják


.cctor hívás időzítése:


    A statikus konstruktor automatikusan meghívódik, mielőtt az első példány létrejött vagy bármely statikus tagra hivatkoznának. (Ez az eredeti idézet az MSDN-en)

    Egyértelmű, hogy a .cctor csak egyszer hívják meg ugyanabban a programtartományban, nem pedig minden alkalommal, amikor egy objektumot megidéznek, mint a .ctor-t,

.cctor használat

    A statikus konstruktorokat használják bármilyen statikus adat inicializálására, vagy olyan konkrét műveletek végrehajtására, amelyeket csak egyszer kell végrehajtani.


Például:

Az alábbi kódok mind Windows 7-ben van fordítva, szemben a 2005-ös kiadás móddal, és ha az eredmény eltér, fontold meg a kiadási módra váltást, és újra próbálkozni




Fordítsd le ezt a kódszegmenst, majd használd az ILDISM-et a megtekintéshez, a metódustábla a következő



.ctor(): void // Ez egy példánykonstruktora az osztálynak, amelyet a fordító automatikusan biztosít

Main():void(string[]) //Program belépési pontja

Nyilvánvalóan nincs .cctor az assembly rendszerben, és a fordító nem ad automatikusan .cctor függvényeket, ha egy osztálynak nincs statikus mezője, amit inicializálni kell, ami eltér a .ctor-tól, amely amúgy is mindig létezik

A kód módosítása




A kód fordítása után figyelmeztetés lesz, de ez nem fontos, a lényeg, hogy amikor az assembly ILDASTOM-mal nézi meg, a várt .cctor, statikus konstruktor nem jelenik meg!


mi történt?

Téves-e a következtetés? A CCTOR nem egy statikus mező, amelyet egy osztály inicializálására használnak?

Nyugi, kérlek, nézd meg a kódot





Az egyetlen különbség a kód és az előző között az, hogy megváltoztatja a statikus mező i kezdeti értékét, és a következő lépés az, hogy tanúja legyen a varázslatos pillanatnak

Csináljuk meg DASM-ot, és meglepetésünkre végre megérkezett a nagyon kívánt .cctor!



Nézd meg a .cctor implementációs kódot, és látni fogod:

.method private hidebysig specialname rtspecialname static
        void .cctor() cil managed
{
  Kód mérete 7 (0x7)
  .maxstack 8
  IL_0000: ldc.i4.1 // Statikus mezők megtestesítése :-)
  IL_0001: STSFLD int32 only_lonely. V::i
  IL_0006: ret.
} // A módszer vége::.cctor


Miért van ez így? Lehetséges ok az, hogy az Int32 típus alapértelmezett értéke 0, és a fordító ezt érzékeli, valamint optimalizálja, hogy ne generáljon .cctor kódot

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

Végül magunk is megvalósíthatunk egy .cctor függvényt, hogy speciális funkcionális követelményeket valósítsunk meg

összefoglalás
1、. a CTOR a szerkezeti módszer;
2、. a cctor egy típus-inicializátor, amely statikus konstruktor C#-ban;
3. Amikor C osztály megteremtik, először egy értéket rendel a deklaráció idején megadott mezőhöz, majd hívja az alaposztály konstruktorát, majd ugyanígy építi fel magát, egészen a felső szintű System.Object szintig, majd visszatér, hogy végrehajtsa a kódot a C explicit építési módszerében, ami egy ilyen rekurzív folyamat.





Előző:Általános kontextus-kötött objektumok: ContextBoundObject és generikus osztályok nem támogatottak
Következő:A static, nem statikus és konstruktív módszerek végrehajtási sorrendjének összefoglalása egy osztályban
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com