Kā izskatās using direktīva pēc kompilācijas?
sobes.tech AI
Atbilde no AI
Direktīva using pati par sevi ne ģenerē izpildāmo kodu. Tā tiek apstrādāta no kompilatora puses kompilācijas laikā un tiek izmantota vairākām mērķiem:
-
Norādīt izmantotās vārdu telpas (usings for namespaces): Atļauj izmantot tipus no norādītajām vārdu telpām bez pilna kvalificēta nosaukuma. Pēc kompilācijas, saites uz tipiem IL kodā saturēs pilnus kvalificētus nosaukumus (vārdu telpa + tips).
// Pirms kompilācijas: using System; // Izmantot Console klasi bez kvalifikācijas Console.WriteLine("Hello"); // Pēc kompilācijas (IL kodā): // izsaukums uz metodi System.Console::WriteLine(string) -
Vārdu telpu vai tipu pseidonīmi (using aliases): Izveido īsāku nosaukumu vārdu telpai vai tipam. IL kodā tiek izmantoti oriģinālie pilnie nosaukumi, ne pseidonīmi.
// Pirms kompilācijas: using MyCustomType = MyProject.MyNamespace.SomeVeryLongTypeName; MyCustomType instance = new MyCustomType(); // Pēc kompilācijas (IL kodā): // izveido MyProject.MyNamespace.SomeVeryLongTypeName tipa instanci -
Statiskā using (using static): Ļauj tieši izsaukt statiskos tipu locekļus bez tipa nosaukuma norādīšanas. IL kodā izsaukums saturēs pilnu tipa un statiskās metodes nosaukumu.
// Pirms kompilācijas: using static System.Math; double result = Sqrt(16.0); // izmanto Math.Sqrt // Pēc kompilācijas (IL kodā): // izsaukums uz System.Math::Sqrt(double) statisko metodi -
usingdirektīva (Statement block): Nodrošina pareizu resursu atbrīvošanu, kas realizēIDisposableinterfeisu. Kompilators ģenerētry...finallybloku, kas izsaucDispose()metodi objektam.// Pirms kompilācijas: using (var stream = new System.IO.FileStream("file.txt", System.IO.FileMode.Open)) { // darbs ar straumi } // Dispose() tiek izsaukts šeit // Pēc kompilācijas (apmēram IL kodā): /* .try { // izveido straumes objektu // darbs ar straumi } finally { // null pārbaude un stream.Dispose() izsaukums } */
Tādējādi, using direktīvas netiek saglabātas kā atsevišķas sastāvdaļas kompilētajā kodā. Tās ietekmē to, kā kompilators risina tipus un narius (pirmie trīs gadījumi) un kā ģenerē kodu resursu pārvaldībai (pēdējais gadījums).