Определение и реализация интерфейсов

Определение и реализация интерфейсов

Как бы это странно ни выглядело, типы интерфейса определяются в CIL с помощью директивы .class. Но когда директива .сlass сопровождается атрибутом interface, соответствующий тип реализуется, как тип интерфейса CTS (Common Type System – общая система типов). После определения интерфейс можно привязать к типу класса или структуры с помощью CIL-атрибута implements.

.namespace MyNamespace {

 // Определение интерфейса.

 .class public interface IMyInterface {}

 .class public MyBaseClass {}

 // Теперь DerivedTestClass реализует IAmAnInterface.

 class public MyDerivedClass

  extends MyNamespace.MyBaseClass implements MyNamespace.IMyInterface {}

}

Как было показано в главе 7, интерфейсы могут выступать в качестве базовых интерфейсов в отношении других типов интерфейса, в результате чего создаются иерархии интерфейсов. Однако, вопреки вашим возможным догадкам, атрибут extends нельзя использовать для получения интерфейса А из интерфейса В. Атрибут extends используется только для указания базового класса типа. Чтобы расширить интерфейс, вы должны еще раз использовать атрибут implements.

// Расширение интерфейсов в терминах CIL.

.class public interface IMyInterface {}

.class public interface IMyOtherInterface implements MyNamespace.IMyInterface {}

Определение структур

Директива .class может использоваться и для определения CTS-структуры, если соответствующий тип расширяет System.ValueType. Кроме того, такая директива .class сопровождается атрибутом sealed (поскольку структура не может быть базовой по отношению к другим типам, характеризуемым значениями). Если вы попытаетесь сделать иначе, ilasm.exe сгенерирует ошибку компиляции.

// Структура всегда должна быть изолированной.

.class public sealed MyStruct extends [mscorlib]System.ValueType {}

Полезно знать о том, что CIL предлагает специальное сокращение для определения типа структуры. Если вы используете атрибут value, новый тип будет производным от [mscorlib] System.ValueType и получит атрибут sealed автоматически. Таким образом, можно определить MyStruct так.

// Сокращенная запись для определения структуры.

.class public value MyStruct{}

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Дизайн интерфейсов — это копирайтинг

Из книги Getting Real (на русском) [вычитывается] автора 37signals

Дизайн интерфейсов — это копирайтинг Каждая буква имеет значениеДизайн интерфейсов — это копирайтинг. Лучшие интерфейсы написаны. Если вы думаете что каждый пиксель, каждая иконка, каждый шрифт имеет значение, вы поверите и в значимость каждой буквы. Когда вы


13.2. Настройка сетевых интерфейсов

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

13.2. Настройка сетевых интерфейсов Интерфейсом с точки зрения ОС является устройство, через которое система получает и передает IP-пакеты. Роль интерфейса локальной сети может выполнять одно (или несколько) из следующих устройств: Ethernet-карта, ISDN-адаптер или модем,


Определение интерфейсов в C#

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Определение интерфейсов в C# Изложение материала этой главы мы начнем с формального определения типа "интерфейс". Интерфейс – это просто именованная коллекция семантически связанных абстрактных членов. Эти члены определяются интерфейсом в зависимости от поведения,


Реализация интерфейсов в C#

Из книги Человеческий фактор в программировании автора Константин Ларри Л

Реализация интерфейсов в C# Чтобы расширить функциональные возможности класса (или структуры) путем поддержки типов интерфейса, нужно просто указать в определении класса (или структуры) список соответствующих типов, разделив их запятыми. Непосредственный базовый класс


Построение иерархии интерфейсов

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

Построение иерархии интерфейсов Продолжим наше обсуждение вопросов создания пользовательских интерфейсов и рассмотрим тему иерархии интерфейсов. Вы знаете, что класс может выступать в роли базового класса для других классов (которые, в свою очередь, тоже могут быть


Реализация интерфейсов в Visual Studio 2005

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

Реализация интерфейсов в Visual Studio 2005 Программирование на основе интерфейсов – это мощная техника программирования, но процесс реализации интерфейсов может предполагать ввод программного кода вручную в очень больших объемах. Поскольку интерфейсы представляют собой


Отображение реализованных интерфейсов

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Отображение реализованных интерфейсов Теперь построим метод ListInterfaces(), который будет печатать имена интерфейсов, поддерживаемых указанным на входе типом. Единственным заслуживающим внимания моментом здесь является вызов GetInterfaces(), возвращающий массив System.Types. Это


40 Редактирование интерфейсов

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

40 Редактирование интерфейсов Моя компания только что закончила редактировать пользовательский интерфейс. Официально контракт предусматривал проведение «экспертной оценки юзабилити», но на самом деле мы занимались редактированием. Хороший пользовательский интерфейс


11.3. Оценка конструкций интерфейсов

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

11.3. Оценка конструкций интерфейсов Все данные стили интерфейсов продолжают существовать до сих пор благодаря тому, что они адаптированы для различных задач. Принимая решение о конструкции проекта, важно знать, как подбирать (или комбинировать) приемлемые стили для


11.3. Оценка конструкций интерфейсов

Из книги Вопросы истории: UNIX, Linux, BSD и другие автора Федорчук Алексей Викторович

11.3. Оценка конструкций интерфейсов Все данные стили интерфейсов продолжают существовать до сих пор благодаря тому, что они адаптированы для различных задач. Принимая решение о конструкции проекта, важно знать, как подбирать (или комбинировать) приемлемые стили для


Минимум интерфейсов

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

Минимум интерфейсов Правило Минимума Интерфейсов ограничивает общее число информационных каналов, связывающих модули системы:Каждый модуль должен поддерживать связь с возможно меньшим числом других модулей.Связь между модулями может осуществляться различными


22.8.3 Адреса интерфейсов IPv6

Из книги автора

22.8.3 Адреса интерфейсов IPv6 Каждый интерфейс версии 6 имеет список соответствующих ему адресов. Как минимум, список содержит уникальный адрес локальной связи (link local address), имеющий формат: 1111111010 (10 бит) 00…00 Уникальный адрес технологии связи Каждому узлу необходим способ


22.6. Связывание с адресами интерфейсов

Из книги автора

22.6. Связывание с адресами интерфейсов Одно из типичных применений функции get_ifi_info связано с приложениями UDP, которым нужно выполнять мониторинг всех интерфейсов на узле, чтобы знать, когда и на какой интерфейс приходит дейтаграмма. Это позволяет получающей программе


Реализация нескольких интерфейсов

Из книги автора

Реализация нескольких интерфейсов Несколько интерфейсов могут содержать одинаковые методы или свойства. При наследовании от таких интерфейсов такие одинаковые методы или свойства сливаются в один: type IShape = interface procedure Draw; property X: integer read; property Y: integer read; end; IBrush =