როგორ გამოიყურება using დირექტივა კომპილაციის შემდეგ?
sobes.tech AI
პასუხი AI-სგან
დირექტივა using თავისთავად არ ქმნის შესრულებად კოდს. იგი დამუშავებულია კომპილატორის მიერ კომპილაციის ეტაპზე და გამოიყენება რამდენიმე მიზნისთვის:
-
გამოყენებული სახელფასო სივრცეების მითითება (usings for namespaces): საშუალებას აძლევს გამოიყენოთ ტიპები მითითებულ სახელფასო სივრცეებიდან სრული კვალიფიციური სახელის გარეშე. კომპილაციის შემდეგ, IL-კოდში მითითებები ტიპებზე შეიცავს სრული კვალიფიციური სახელებს (სახელფასო სივრცე + ტიპის სახელი).
// კომპილაციის წინ: using System; // Console კლასის გამოყენება კვალიფიკაციის გარეშე Console.WriteLine("Hello"); // კომპილაციის შემდეგ (IL-კოდში): // გამოძახება System.Console::WriteLine(string) მეთოდს -
სახელფასო სივრცეების ან ტიპების ალისები (using aliases): ქმნის მოკლე სახელს სახელფასო სივრცეებისთვის ან ტიპებისთვის. IL-კოდში გამოიყენება ორიგინალური სრული სახელები, არა ალისები.
// კომპილაციის წინ: using MyCustomType = MyProject.MyNamespace.SomeVeryLongTypeName; MyCustomType instance = new MyCustomType(); // კომპილაციის შემდეგ (IL-კოდში): // შექმნა ინстанცია MyProject.MyNamespace.SomeVeryLongTypeName ტიპის -
სტატიკური using (using static): საშუალებას აძლევს პირდაპირ გამოიძახოთ სტატიკური წევრები ტიპის სახელის მითითების გარეშე. IL-კოდში გამოძახება შეიცავს სრული სახელი ტიპისა და სტატიკური მეთოდის.
// კომპილაციის წინ: using static System.Math; double result = Sqrt(16.0); // გამოყენება Math.Sqrt // კომპილაციის შემდეგ (IL-კოდში): // გამოძახება System.Math::Sqrt(double) სტატიკური მეთოდის -
usingდირექტივა (Statement block): უზრუნველყოფს რესურსების სწორად გათავისუფლებას, რომლებიც ახორციელებენIDisposableინტერფეისს. კომპილატორი ქმნისtry...finallyბლოკს, რომელიც ახორციელებსDispose()მეთოდს ობიექტზე.// კომპილაციის წინ: using (var stream = new System.IO.FileStream("file.txt", System.IO.FileMode.Open)) { // მუშაობა ნაკადთან } // Dispose() აქ იძახება // კომპილაციის შემდეგ (IL-კოდში): /* .try { // შექმნა ობიექტის stream // მუშაობა ნაკადთან } finally { // null-ის შემოწმება და stream.Dispose() იძახება } */
ამიტომ, using დირექტივები არ რჩება კომპილირებულ კოდში როგორც ასეთი. ისინი გავლენას ახდენენ იმაზე, როგორ აძლევს კომპილატორი სახელებს ტიპებს და წევრებს (პირველ სამ შემთხვევაში) და როგორ ქმნის კოდს რესურსების მართვისთვის (ბოლოს).