Jak vypadá direktiva using po kompilaci?
sobes.tech AI
Odpověď od AI
Direktiva using sama o sobě nevytváří spustitelný kód. Je zpracovávána kompilátorem v fázi kompilace a slouží k několika účelům:
-
Určení používaných jmenných prostorů (usings for namespaces): Umožňuje používat typy z uvedených jmenných prostorů bez úplného kvalifikovaného názvu. Po kompilaci budou odkazy na typy v IL kódu obsahovat úplné kvalifikované názvy (jmenný prostor + název typu).
// Před kompilací: using System; // použití třídy Console bez kvalifikace Console.WriteLine("Hello"); // Po kompilaci (v IL kódu): // volání metody System.Console::WriteLine(string) -
Alias pro jmenné prostory nebo typy (using aliases): Vytváří kratší název pro jmenný prostor nebo typ. V IL kódu jsou používány původní úplné názvy, nikoli aliasy.
// Před kompilací: using MyCustomType = MyProject.MyNamespace.SomeVeryLongTypeName; MyCustomType instance = new MyCustomType(); // Po kompilaci (v IL kódu): // vytvoření instance typu MyProject.MyNamespace.SomeVeryLongTypeName -
Statické using (using static): Umožňuje přímo volat statické členy typu bez uvedení názvu typu. V IL kódu bude volání obsahovat úplný název typu a statickou metodu.
// Před kompilací: using static System.Math; double result = Sqrt(16.0); // použití Math.Sqrt // Po kompilaci (v IL kódu): // volání statické metody System.Math::Sqrt(double) -
using-direktiva (Statement block): Zajišťuje správné uvolnění zdrojů implementujících rozhraníIDisposable. Kompilátor generuje bloktry...finally, který volá metoduDispose()objektu.// Před kompilací: using (var stream = new System.IO.FileStream("file.txt", System.IO.FileMode.Open)) { // práce s proudem } // Dispose() je voláno zde // Po kompilaci (příklad v IL kódu): /* .try { // vytvoření objektu stream // práce s proudem } finally { // kontrola na null a volání stream.Dispose() } */
Takže, using-direktivy nezůstávají v zkompilovaném kódu jako takové. Ovlivňují, jak kompilátor řeší názvy typů a členů (pro první tři případy) a jak generuje kód pro správu zdrojů (pro poslední případ).