Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<b>// Этот код не скомпилируете»!</b>
.namespace MyNamespace
{
.class public MyBaseClass {}
.class public MyDerivedClass
<b> extends MyBaseClass {}</b>
}
Чтобы корректно определить родительский класс для
MyDerivedClass
MyBaseClass
<b>// Уже лучше!</b>
.namespace MyNamespace
{
.class public MyBaseClass {}
.class public MyDerivedClass
<b> extends MyNamespace.MyBaseClass {}</b>
}
В дополнение к атрибутам
public
extends
.class

Определение и реализация интерфейсов в CIL
Несколько странно, но типы интерфейсов в CIL определяются с применением директивы
.class
.class
implements
.namespace MyNamespace
{
<b> // Определение интерфейса.</b>
.class public interface IMyInterface {}
// Простой базовый класс.
.class public MyBaseClass {}
<b> // Теперь MyDerivedClass реализует IMylnterface</b>
<b> // и расширяет MyBaseClass.</b>
.class public MyDerivedClass
extends MyNamespace.MyBaseClass
implements MyNamespace.IMyInterface {}
}
На заметку! Конструкция
extends
implements
implements
Вспомните из главы 8, что интерфейсы могут выступать в роли базовых для других типов интерфейсов, позволяя строить иерархии интерфейсов. Однако вопреки возможным ожиданиям применять атрибут
extends
А
В
extends
implements
<b>// Расширение интерфейсов в CIL.</b>
.class public interface IMyInterface {}
.class public interface IMyOtherInterface
implements MyNamespace.IMyInterface {}
Определение структур в CIL
Директива
.class
System.ValueType
.class
sealed
ilasm.exe
<b>// Определение структуры всегда является запечатанным.</b>
.class public sealed MyStruct
extends [System.Runtime]System.ValueType{}
Имейте в виду, что в CIL предусмотрен сокращенный синтаксис для определения типа структуры. В случае применения атрибута
value
[System.Runtime]System.ValueType
MyStruct
<b>// Сокращенный синтаксис объявления структуры.</b>
.class public sealed value MyStruct{}
Определение перечислений в CIL
Перечисления .NET Core порождены от класса
System.Enum
System.ValueType
[System.Runtime]System.Enum
<b>// Перечисление.</b>
.class public sealed MyEnum
extends [System.Runtime]System.Enum{}
Подобно структурам перечисления могут быть определены с помощью сокращенного синтаксиса, используя атрибут
enum
<b>// Сокращенный синтаксис определения перечисления.</b>
.class public sealed enum MyEnum{}
Вскоре вы увидите, как указывать пары "имя-значение" перечисления.
Определение обобщений в CIL
Обобщенные типы также имеют собственное представление в синтаксисе CIL. Вспомните из главы 10, что обобщенный тип или член может иметь один и более параметров типа. Например, в типе
List<T>
Dictionary<TKey,TValue>
'