Hogy néz ki a using direktíva a fordítás után?
sobes.tech MI
Válasz az MI-től
A using direktíva önmagában nem generál végrehajtható kódot. A fordító a fordítási szakaszban dolgozza fel, és több célra használja:
-
A használt névtér (namespace) megjelölése: Lehetővé teszi, hogy a megadott névtér típusait a teljes minősített név megadása nélkül használjuk. A fordítás után az IL-kódban a típusokra való hivatkozások a teljes minősített neveket tartalmazzák (névtér + típus neve).
// Fordítás előtt: using System; // a Console osztály használata minősítés nélkül Console.WriteLine("Hello"); // Fordítás után (IL-kódban): // a System.Console::WriteLine(string) metódus hívása -
Aliasok névtérhez vagy típushoz (using aliases): Rövidebb nevet hoz létre egy névtérhez vagy típushoz. Az IL-kódban az eredeti teljes nevek szerepelnek, nem az aliasok.
// Fordítás előtt: using MyCustomType = MyProject.MyNamespace.SomeVeryLongTypeName; MyCustomType instance = new MyCustomType(); // Fordítás után (IL-kódban): // példány létrehozása a MyProject.MyNamespace.SomeVeryLongTypeName típusból -
Statikus using (using static): Lehetővé teszi, hogy közvetlenül hívjuk a típus statikus tagjait anélkül, hogy meg kellene adni a típus nevét. IL-kódban a hívás a típus teljes nevével és a statikus metódussal fog szerepelni.
// Fordítás előtt: using static System.Math; double result = Sqrt(16.0); // Math.Sqrt használata // Fordítás után (IL-kódban): // a System.Math::Sqrt(double) statikus metódus hívása -
using-direktíva (Statement block): Biztosítja, hogy azIDisposableinterfészt megvalósító erőforrásokat helyesen szabadítsuk fel. A fordító egytry...finallyblokkot generál, amely meghívja az objektumDispose()metódusát.// Fordítás előtt: using (var stream = new System.IO.FileStream("file.txt", System.IO.FileMode.Open)) { // a stream-mel való munka } // itt hívódik meg a Dispose() // Fordítás után (IL-kódban példaként): /* .try { // a stream objektum létrehozása // a stream-mel való munka } finally { // null ellenőrzés és a stream.Dispose() hívása } */
Így a using-direktívák nem maradnak meg a fordított kódban mint ilyenek. Hatással vannak arra, hogyan oldja meg a fordító a típus- és tagneveket (az első három esetben), és hogyan generál kódot az erőforrások kezelésére (az utolsó esetben).