Kako izgleda direktiva using nakon kompilacije?
sobes.tech АИ
Одговор од АИ
Direktiva using sama po sebi ne generiše izvršni kod. Obradjuje se od strane kompajlera u fazi kompajliranja i koristi se za nekoliko svrha:
-
Navođenje korišćenih prostora imena (usings for namespaces): Omogućava korišćenje tipova iz navedenih prostora imena bez punog kvalifikovanog imena. Nakon kompajliranja, reference na tipove u IL-kodu će sadržavati puna kvalifikovana imena (prostor imena + ime tipa).
// Pre kompajliranja: using System; // korišćenje klase Console bez kvalifikacije Console.WriteLine("Hello"); // Nakon kompajliranja (u IL-kodu): // poziv metode System.Console::WriteLine(string) -
Pseudonimi za prostore imena ili tipove (using aliases): Kreira kraće ime za prostor imena ili tip. U IL-kodu se koriste originalna puna imena, a ne pseudonimi.
// Pre kompajliranja: using MyCustomType = MyProject.MyNamespace.SomeVeryLongTypeName; MyCustomType instance = new MyCustomType(); // Nakon kompajliranja (u IL-kodu): // kreiranje instance od MyProject.MyNamespace.SomeVeryLongTypeName -
Statički using (using static): Omogućava direktno pozivanje statičkih članova tipa bez navođenja imena tipa. U IL-kodu će poziv sadržavati puno ime tipa i statičkog metoda.
// Pre kompajliranja: using static System.Math; double result = Sqrt(16.0); // koristi Math.Sqrt // Nakon kompajliranja (u IL-kodu): // poziv statičkog metoda System.Math::Sqrt(double) -
Direktiva
using(Statement block): Osigurava pravilno oslobađanje resursa koji implementiraju interfejsIDisposable. Kompajler generiše bloktry...finallykoji poziva metodDispose()objekta.// Pre kompajliranja: using (var stream = new System.IO.FileStream("file.txt", System.IO.FileMode.Open)) { // rad sa tokom } // Dispose() se poziva ovde // Nakon kompajliranja (primer u IL-kodu): /* .try { // kreiranje objekta stream // rad sa tokom } finally { // provera na null i pozivanje stream.Dispose() } */
Dakle, using direktive ne ostaju u kompajliranom kodu kao takve. One utiču na to kako kompajler rešava imena tipova i članova (za prva tri slučaja) i na generisanje koda za upravljanje resursima (za poslednji slučaj).