Kuidas välja näeb using direktiiv pärast kompileerimist?
sobes.tech AI
Vastus AI-lt
Direktiiv using iseenesest ei genereeri täitvat koodi. Seda töödleb kompilaatoril kompileerimise etapis ning seda kasutatakse mitmel eesmärgil:
-
Nimetusruumide kasutamise näitamine (usings for namespaces): Annab võimaluse kasutada tüüpe nimetatud nimetusruumidest ilma täieliku kvalifitseeritud nime kasutamata. Pärast kompileerimist sisaldavad IL-koodi viited tüüpidele täielikke kvalifitseeritud nimesid (nimetusruum + tüübi nimi).
// Enne kompileerimist: using System; // Kasutada Console klassi ilma kvalifikatsioonita Console.WriteLine("Hello"); // Pärast kompileerimist (IL-koodis): // kutsutakse välja System.Console::WriteLine(string) -
Nimetusruumide või tüüpide pseudonüümid (using aliases): Loob lühema nime nimetusruumile või tüübile. IL-koodis kasutatakse algseid täisnimesid, mitte pseudonüüme.
// Enne kompileerimist: using MyCustomType = MyProject.MyNamespace.SomeVeryLongTypeName; MyCustomType instance = new MyCustomType(); // Pärast kompileerimist (IL-koodis): // luuakse eksemplar MyProject.MyNamespace.SomeVeryLongTypeName tüübist -
Staatiline using (using static): Annab võimaluse otse kutsuda staatilisi tüüpi liikmeid ilma tüübi nime näitamata. IL-koodis sisaldab väljakutse täielikku tüübi ja staatilise meetodi nime.
// Enne kompileerimist: using static System.Math; double result = Sqrt(16.0); // kasutab Math.Sqrt // Pärast kompileerimist (IL-koodis): // kutsutakse välja System.Math::Sqrt(double) staatiline meetod -
usingdirektiiv (Statement block): Tagab ressursside õige vabastamise, mis rakendavadIDisposableliidest. Kompileerija genereeribtry...finallyploki, mis kutsub väljaDispose()meetodi objektil.// Enne kompileerimist: using (var stream = new System.IO.FileStream("file.txt", System.IO.FileMode.Open)) { // töövoo kasutamine } // Dispose() kutsutakse välja siin // Pärast kompileerimist (ligikaudu IL-koodis): /* .try { // objekti stream loomine // töövoo kasutamine } finally { // null kontroll ja stream.Dispose() väljakutse } */
Seega, using direktiive ei jää kompileeritud koodi sellistena. Nad mõjutavad seda, kuidas kompilaator lahendab tüüpe ja liikmeid (esimese kolme juhtumi puhul) ning kuidas genereerib koodi ressursside haldamiseks (viimase juhtumi puhul).