Язык программирования C#9 и платформа .NET5 - Джепикс Филипп - Страница 353
- Предыдущая
- 353/642
- Следующая
}Как и в С#, поля данных класса будут автоматически инициализироваться подходящими стандартными значениями. Чтобы предоставить пользователю объекта возможность указывать собственные значения во время создания закрытых полей данных, потребуется создать специальные конструкторы.
Определение конструкторов типа в CIL
Спецификация CTS поддерживает создание конструкторов как уровня экземпляра, так и уровня класса (статических). В CIL конструкторы уровня экземпляра представляются с использованием лексемы
.ctor.cctorrtspecialnamespecialnamevoid.class public MyBaseClass{ .field private string stringField .field private int32 intField .method public hidebysig specialname rtspecialname instance void .ctor(string s, int32 i) cil managed {<b> // Добавить код реализации...</b> }}Обратите внимание, что директива
.ctorinstancecil managedОпределение свойств в CIL
Свойства и методы также имеют специфические представления в CIL. В качестве примера модифицируйте класс
MyBaseClassTheStringspecialname.class public MyBaseClass{ ... .method public hidebysig specialname instance string get_TheString() cil managed {<b> // Добавить код реализации...</b> } .method public hidebysig specialname instance void set_TheString(string 'value') cil managed {<b> // Добавить код реализации...</b> } .property instance string TheString() { .get instance string MyNamespace.MyBaseClass::get_TheString() .set instance void MyNamespace.MyBaseClass::set_TheString(string) }}В терминах CIL свойство отображается на пару методов, имеющих префиксы
get_set_.property.get.setНа заметку! Обратите внимание, что входной параметр метода
setОпределение параметров членов
Коротко говоря, параметры в CIL указываются (более или менее) идентично тому, как это делается в С#. Например, каждый параметр определяется путем указания его типа данных, за которым следует имя параметра. Более того, подобно C# язык CIL позволяет определять входные, выходные и передаваемые по ссылке параметры. Вдобавок в CIL допускается определять массив параметров (соответствует ключевому слову
paramsЧтобы проиллюстрировать процесс определения параметров в низкоуровневом коде CIL, предположим, что необходимо построить метод, который принимает параметр
int32int32[System.Runtime.Extensions]System.Collection.ArrayListint32public static void MyMethod(int inputInt, ref int refInt, ArrayList ar, out int outputInt){ outputInt = 0; // Просто чтобы удовлетворить компилятор C#...}После отображения метода
MyMethod()&int32 &Выходные параметры также снабжаются суффиксом
&[out][System.RuntimeExtensions]System.Collections.ArrayListclass.class.method public hidebysig static void MyMethod(int32 inputInt,- Предыдущая
- 353/642
- Следующая
