Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 31028|Atbildi: 1

[Avots] .ctor un .cctor no .net

[Kopēt saiti]
Publicēts 06.04.2017 14:56:38 | | | |
.ctor ir zināms ikvienam

.cctor nav pazīstams un to var viegli izmantot ļaunprātīgi

Tā sauktais .cctor ir statisks konstruktors C# sintaksē

Forma kā




Līdzības un atšķirības starp .cctor un .ctor

   1. Piekļuves tiesību identifikatori nevar būt publiski, privāti utt., kurus nevar izmantot, kas atšķiras no .ctor

   2. Nedrīkst būt atgrieztās vērtības, kas ir tāda pati kā .ctor

   3. Nevar būt parametru, .ctor var būt vairāki parametri

   4. Var būt tikai viens, un jābūt vismaz vienam .ctor

   5. Programmētājs nevar kontrolēt .cctor zvana laiku, savā ziņā programmētājs var kontrolēt tā izsaukuma laiku

   6. Programmētāji nevar tieši izsaukt .cctor, .ctor Kad programmētājs izmanto jauno operatoru, noteikti tiks izsaukts .ctor


.cctor zvana laiks:


    Statiskais konstruktors tiek automātiski izsaukts pirms pirmās instances izveides vai atsauces uz jebkuru statisku elementu. (Šis ir oriģinālais citāts MSDN)

    Ir skaidrs, ka .cctor tiek izsaukts tikai vienu reizi vienā programmas domēnā, nevis tiek izsaukts katru reizi, kad objekts tiek instancēts, piemēram, .ctor

.cctor lietošana

    Statiskie konstruktori tiek izmantoti, lai inicializētu statiskos datus vai veiktu noteiktas darbības, kas jāveic tikai vienu reizi.


Piemēram:

Viss tālāk norādītais kods tiek kompilēts Windows 7, salīdzinot ar 2005. gada izlaišanas režīmu, un, ja rezultāti atšķiras, apsveriet iespēju pārslēgties uz laidiena režīmu un mēģināt vēlreiz




Kompilējiet šo koda segmentu un pēc tam izmantojiet ILDISM, lai to apskatītu, metodes tabula ir šāda



.ctor(): void // Šis ir kompilatora automātiski nodrošinātās klases instances konstruktors

main():void(string[]) //Programmas ieejas punkts

Acīmredzot montāžā nav .cctor, un kompilators automātiski nenodrošinās .cctor funkcijas, ja klasei nav statisku lauku, kas jāinicializē, kas atšķiras no .ctor, kas vienmēr pastāv

Koda modificēšana




Sastādot šo kodu, būs brīdinājums, bet tas nav svarīgi, svarīgi ir tas, ka, apskatot montāžu ar ILDASTOM, neparādās paredzamais .cctor, statiskais konstruktors!


Kas noticis?

Vai secinājums ir nepareizs?. CCTOR nav statisks lauks, ko izmanto klases inicializēšanai?

Ņemiet to mierīgi, lūdzu, apskatiet kodu





Vienīgā atšķirība starp šo kodu un iepriekšējo ir tā, ka tas maina statiskā lauka i sākotnējo vērtību, un nākamā lieta ir redzēt maģisko brīdi

DASM to, un mums par pārsteigumu, ļoti pieprasītais .cctor beidzot ir klāt!



Apskatiet .cctor ieviešanas kodu un redzēsiet:

.method private hidebysig specialname rtspecialname static
        void .cctor() cil pārvaldīts
{
  Koda izmērs 7 (0x7)
  .maxstack 8
  IL_0000: ldc.i4.1 // Instancēt statiskos laukus :-)
  IL_0001: stsfld int32 only_lonely. A::i
  IL_0006: ret
} // A metodes beigas::.cctor


Kāpēc tas tā ir? Iespējamais iemesls ir tas, ka Int32 tipa noklusējuma vērtība ir 0, un kompilators to atklāj un optimizē, lai neradītu .cctor kodu

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

Visbeidzot, mēs paši varam ieviest .cctor funkciju, lai īstenotu īpašas funkcionālās prasības

Kopsavilkuma
1、. CTOR ir būvniecības metode;
2、. cctor ir tipa inicializators, kas ir statisks konstruktors C#;
3. Kad C klase tiek instancēta, tā vispirms piešķirs vērtību laukam, kas tiek piešķirts deklarēšanas brīdī, un pēc tam izsauc bāzes klases konstruktoru un pēc tam veido sevi tādā pašā veidā līdz augstākā līmeņa System.Object, un pēc tam atgriezīsies, lai izpildītu kodu C skaidrās konstrukcijas metodē, kas ir šāds rekursīvs process.





Iepriekšējo:Vispārīgi ar kontekstu saistītie objekti: ContextBoundObject un vispārīgās klases netiek atbalstītas
Nākamo:Statisko, nestatisko un konstruktīvo metožu izpildes secības kopsavilkums klasē
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com