Ako vyzerá direktíva using po kompilácii?
sobes.tech AI
Odpoveď od AI
Direktíva using sama o sebe ne generuje izvršný kód. Spracováva ju kompilátor v štádiu kompilácie a slúži na niekoľko účelov:
-
Uvedenie používaných priestorov mien (usings for namespaces): Umožňuje používať typy z uvedených priestorov mien bez úplného kvalifikovaného mena. Po kompilácii budú odkazy na typy v IL-kóde obsahovať úplné kvalifikované mená (priestor mien + názov typu).
// Pred kompiláciou: using System; // použitie triedy Console bez kvalifikácie Console.WriteLine("Hello"); // Po kompilácii (v IL-kóde): // volanie metódy System.Console::WriteLine(string) -
Pseudonymy pre priestory mien alebo typy (using aliases): Vytvára skrátené meno pre priestor mien alebo typ. V IL-kóde sa používajú pôvodné úplné mená, nie pseudonymy.
// Pred kompiláciou: using MyCustomType = MyProject.MyNamespace.SomeVeryLongTypeName; MyCustomType instance = new MyCustomType(); // Po kompilácii (v IL-kóde): // vytvorenie inštancie od MyProject.MyNamespace.SomeVeryLongTypeName -
Statické using (using static): Umožňuje priamo volať statické členy typu bez uvádzania mena typu. V IL-kóde bude volanie obsahovať úplné meno typu a statickej metódy.
// Pred kompiláciou: using static System.Math; double result = Sqrt(16.0); // použitie Math.Sqrt // Po kompilácii (v IL-kóde): // volanie statickej metódy System.Math::Sqrt(double) -
Direktíva
using(Statement block): Zabezpečuje správne uvoľnenie zdrojov, ktoré implementujú rozhranieIDisposable. Kompilátor generuje bloktry...finally, ktorý volá metóduDispose()objektu.// Pred kompiláciou: using (var stream = new System.IO.FileStream("file.txt", System.IO.FileMode.Open)) { // práca s tokom } // Volanie Dispose() sa vykoná tu // Po kompilácii (približne v IL-kóde): /* .try { // vytvorenie objektu stream // práca s tokom } finally { // kontrola na null a volanie stream.Dispose() } */
Takže, using direktívy sa v skompilovanom kóde neuchovávajú ako také. Ovplyvňujú spôsob, akým kompilátor rieši mená typov a členov (pre prvé tri prípady) a spôsob generovania kódu na správu zdrojov (pre posledný prípad).