See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 31028|Vastuse: 1

[Allikas] .ctor ja .cctor .net

[Kopeeri link]
Postitatud 06.04.2017 14:56:38 | | | |
.ctor on kõigile teada

.cctor ei ole tuttav ja seda võib kergesti valesti kasutada

Niinimetatud .cctor on staatiline konstruktor C# süntaksis

Kuju nagu




Sarnasused ja erinevused .cctor ja .ctor vahel

   1. Sul ei saa olla juurdepääsuõiguste identifikaatoreid avalikud, privaatsed jne, mida ei saa kasutada, mis erineb .ctor-ist

   2. Tagastusväärtust ei tohi olla, mis on sama mis .ctor

   3. Parameetreid ei saa olla, .ctoril võib olla mitu parameetrit

   4. Võib olla ainult üks ja peab olema vähemalt üks .ctor

   5. Programmeerija ei saa kontrollida .cctor kõne ajastust, teatud mõttes saab programmeerija kontrollida oma kõne ajastust

   6. Programmeerijad ei saa otse kutsuda .cctor, .ctor Kui programmeerija kasutab uut operaatorit, kutsutakse kindlasti .ctor


.cctor kõne ajastus:


    Staatiline konstruktor kutsutakse automaatselt välja enne, kui esimene eksemplar loodakse või viidatakse mõnele staatilisele liikmele. (See on originaaltsitaat MSDN-is)

    On selge, et .cctor-i kutsutakse samas programmidomeenis ainult korra, mitte iga kord, kui objekt instantsieritakse nagu .ctor

.cctor kasutus

    Staatilisi konstruktoreid kasutatakse staatiliste andmete initsialiseerimiseks või konkreetsete operatsioonide tegemiseks, mida tuleb teha vaid üks kord.


Näiteks:

Kõik järgmine kood on kompileeritud Windows 7-s võrreldes 2005. aasta väljalaskerežiimiga, ja kui tulemused on erinevad, kaalu väljalaskerežiimi vahetamist ja uuesti proovimist




Kompileeri see koodisegment ja kasuta ILDISM-i selle vaatamiseks, meetoditabel on järgmine



.ctor(): void // See on klassi instantsi konstruktor, mille kompilaator automaatselt pakub

Main():void(string[]) //Programmi sisenemispunkt

Ilmselgelt puudub assembleris .cctor ning kompilaator ei paku automaatselt .cctor funktsioone, kui klassil puuduvad staatilised väljad, mida tuleb initsialiseerida, mis erineb .ctor-ist, mis niikuinii alati eksisteerib

Muuda koodi




Selle koodi kompileerimisel tuleb hoiatus, kuid see pole oluline, oluline on see, et ILDASTOM-iga assembleri vaadates ei ilmu oodatud .cctor, staatiline konstruktor!


Mis juhtus?

Kas see järeldus on vale? CCTOR ei ole staatiline väli, mida kasutatakse klassi initsialiseerimiseks?

Rahune maha, palun vaata koodi





Ainus erinevus selle koodi ja eelmise vahel on see, et see muudab staatilise välja i algväärtust ning järgmine asi on maagilise hetke tunnistamine

Teeme DASM-i ja meie üllatuseks on kauaoodatud .cctor lõpuks kohal!



Vaata .cctor rakenduskoodi ja näed:

.method private hidebysig specialname rtspecialname static
        void .cctor() cil managed
{
  Koodi suurus 7 (0x7)
  .maxstack 8
  IL_0000: ldc.i4.1 // Instantiate staatilised väljad :-)
  IL_0001: stsfld int32 only_lonely. V::i
  IL_0006: retk
} // meetodi A::.cctor lõpp


Miks see nii on? Võimalik põhjus on see, et Int32 tüübi vaikimisi väärtus on 0 ning kompilaator tuvastab selle ja optimeerib nii, et see ei toodaks .cctor koodi

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

Lõpuks saame ise rakendada .cctor funktsiooni, et täita erilisi funktsionaalseid nõudeid

Kokkuvõte
1、. CTOR on ehitusmeetod;
2、. cctor on tüübi initsialiseerija, mis on staatiline konstruktor C#-s;
3. Kui klass C instantsitakse, määrab ta esmalt väljale väärtuse, mis on määratud deklaratsiooni hetkel, seejärel kutsub baasklassi konstruktori ja konstrueerib end samamoodi kuni tipptaseme System.Object-ini, ning tuleb tagasi, et täita kood C ekslicitses ehitusmeetodis, mis on nii rekursiivne protsess.





Eelmine:Üldised kontekstiga seotud objektid: ContextBoundObject ja üldised klassid ei ole toetatud
Järgmine:Staatiliste, mittestaatiliste ja konstruktivsete meetodite täitmise järjekorra kokkuvõte klassis
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com