Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 31028|Odpověď: 1

[Zdroj] .ctor a .cctor z .net

[Kopírovat odkaz]
Zveřejněno 06.04.2017 14:56:38 | | | |
.ctor je známý všem

.cctor není známý a může být snadno zneužit

Takzvaný .cctor je statický konstruktor v syntaxi C#

Tvar jako




Podobnosti a rozdíly mezi .cctor a .ctor

   1. Nemůžete mít identifikátory přístupových práv veřejné, soukromé atd., které nelze použít, což je odlišné od .ctor

   2. Nesmí existovat žádná vrácená hodnota, která je stejná jako .ctor

   3. Nemůže existovat žádné parametry, .ctor může mít více parametrů

   4. Může být maximálně jeden a musí existovat alespoň jeden .ctor

   5. Programátor nemůže ovládat časování volání .cctor, v jistém smyslu může programátor ovládat časování jeho volání

   6. Programátoři nemohou přímo volat .cctor, .ctor Když programátor použije nový operátor, bude určitě volán .ctor


.cctor časování hovorů:


    Statický konstruktor je automaticky vyvolán před vytvořením první instance nebo před odkazem na statický člen. (Toto je původní citace na MSDN)

    Je zřejmé, že .cctor je volán pouze jednou ve stejné programové doméně, na rozdíl od toho, aby byl volán pokaždé, když je objekt instancován jako .ctor

.cctor použití

    Statické konstruktory se používají k inicializaci jakýchkoli statických dat nebo k provedení specifických operací, které je třeba provést pouze jednou.


Například:

Veškerý následující kód je zkompilován ve Windows 7, na rozdíl od režimu vydání 2005, a pokud jsou výsledky jiné, zvažte přepnutí do režimu vydání a pokus znovu




Zkompilujte tento segment kódu a poté použijte ILDISM k jeho zobrazení, tabulka metod je následující



.ctor(): void // Toto je inscenční konstruktor třídy automaticky poskytovaný kompilátorem

Main():void(string[]) //Vstupní bod programu

Samozřejmě v assembleru není .cctor a kompilátor automaticky neposkytne .cctor funkce, pokud třída nemá statická pole, která je třeba inicializovat, což je jiné než .ctor, který stejně vždy existuje

Upravte kód




Při kompilaci tohoto kódu se objeví varování, ale to není důležité, důležité je, že při prohlížení assembleru pomocí ILDASTOM se očekávaný .cctor, statický konstruktor neobjeví!


Co se přihodilo?

Je ten závěr špatný? CCTOR není statické pole používané k inicializaci třídy?

Klid, prosím, podívejte se na kód





Jediný rozdíl mezi tímto kódem a předchozím je, že mění počáteční hodnotu statického pole i, a další věcí je být svědkem magického momentu

Pojďme to DASMovat a k našemu překvapení je konečně tady tolik žádaný .cctor!



Podívejte se na implementační kód .cctor a uvidíte:

.method private hidebysig specialname rtspecialname static
        void .cctor() cil managed
{
  Velikost kódu 7 (0x7)
  .maxstack 8
  IL_0000: ldc.i4.1 // Instancujte statická pole :-)
  IL_0001: stsfld int32 only_lonely. Odpověď::i
  IL_0006: reaktiv
} // konec metody A::.cctor


Proč tomu tak je? Možným důvodem je, že výchozí hodnota typu Int32 je 0, kterou kompilátor detekuje a optimalizuje tak, aby nevytvářela kód .cctor

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

Nakonec můžeme sami implementovat funkci .cctor pro implementaci speciálních funkčních požadavků

shrnutí
1、. CTOR je metoda konstrukce;
2、. cctor je inicializátor typu, což je statický konstruktor v C#;
3. Když je třída C instancována, nejprve přiřadí hodnotu poli, které je přiřazeno v době deklarace, poté zavolá konstruktora základní třídy a poté se konstruuje stejným způsobem až k nejvyšší úrovni System.Object, a poté se vrátí, aby spustila kód v explicitní konstrukční metodě C, což je takový rekurzivní proces.





Předchozí:Obecné objekty vázané na kontext: ContextBoundObject a generické třídy nejsou podporovány
Další:Shrnutí pořadí provádění statických, nestatických a konstruktivních metod ve třídě
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com