Определение и реализация интерфейсов
Определение и реализация интерфейсов
Как бы это странно ни выглядело, типы интерфейса определяются в 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{}
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
22.6. Связывание с адресами интерфейсов
22.6. Связывание с адресами интерфейсов Одно из типичных применений функции get_ifi_info связано с приложениями UDP, которым нужно выполнять мониторинг всех интерфейсов на узле, чтобы знать, когда и на какой интерфейс приходит дейтаграмма. Это позволяет получающей программе
13.2. Настройка сетевых интерфейсов
13.2. Настройка сетевых интерфейсов Интерфейсом с точки зрения ОС является устройство, через которое система получает и передает IP-пакеты. Роль интерфейса локальной сети может выполнять одно (или несколько) из следующих устройств: Ethernet-карта, ISDN-адаптер или модем,
22.8.3 Адреса интерфейсов IPv6
22.8.3 Адреса интерфейсов IPv6 Каждый интерфейс версии 6 имеет список соответствующих ему адресов. Как минимум, список содержит уникальный адрес локальной связи (link local address), имеющий формат: 1111111010 (10 бит) 00…00 Уникальный адрес технологии связи Каждому узлу необходим способ
11.3. Оценка конструкций интерфейсов
11.3. Оценка конструкций интерфейсов Все данные стили интерфейсов продолжают существовать до сих пор благодаря тому, что они адаптированы для различных задач. Принимая решение о конструкции проекта, важно знать, как подбирать (или комбинировать) приемлемые стили для
11.3. Оценка конструкций интерфейсов
11.3. Оценка конструкций интерфейсов Все данные стили интерфейсов продолжают существовать до сих пор благодаря тому, что они адаптированы для различных задач. Принимая решение о конструкции проекта, важно знать, как подбирать (или комбинировать) приемлемые стили для
Определение интерфейсов в C#
Определение интерфейсов в C# Изложение материала этой главы мы начнем с формального определения типа "интерфейс". Интерфейс – это просто именованная коллекция семантически связанных абстрактных членов. Эти члены определяются интерфейсом в зависимости от поведения,
Реализация интерфейсов в C#
Реализация интерфейсов в C# Чтобы расширить функциональные возможности класса (или структуры) путем поддержки типов интерфейса, нужно просто указать в определении класса (или структуры) список соответствующих типов, разделив их запятыми. Непосредственный базовый класс
Построение иерархии интерфейсов
Построение иерархии интерфейсов Продолжим наше обсуждение вопросов создания пользовательских интерфейсов и рассмотрим тему иерархии интерфейсов. Вы знаете, что класс может выступать в роли базового класса для других классов (которые, в свою очередь, тоже могут быть
Реализация интерфейсов в Visual Studio 2005
Реализация интерфейсов в Visual Studio 2005 Программирование на основе интерфейсов – это мощная техника программирования, но процесс реализации интерфейсов может предполагать ввод программного кода вручную в очень больших объемах. Поскольку интерфейсы представляют собой
Отображение реализованных интерфейсов
Отображение реализованных интерфейсов Теперь построим метод ListInterfaces(), который будет печатать имена интерфейсов, поддерживаемых указанным на входе типом. Единственным заслуживающим внимания моментом здесь является вызов GetInterfaces(), возвращающий массив System.Types. Это
Дизайн интерфейсов — это копирайтинг
Дизайн интерфейсов — это копирайтинг Каждая буква имеет значениеДизайн интерфейсов — это копирайтинг. Лучшие интерфейсы написаны. Если вы думаете что каждый пиксель, каждая иконка, каждый шрифт имеет значение, вы поверите и в значимость каждой буквы. Когда вы
40 Редактирование интерфейсов
40 Редактирование интерфейсов Моя компания только что закончила редактировать пользовательский интерфейс. Официально контракт предусматривал проведение «экспертной оценки юзабилити», но на самом деле мы занимались редактированием. Хороший пользовательский интерфейс
Реализация нескольких интерфейсов
Реализация нескольких интерфейсов Несколько интерфейсов могут содержать одинаковые методы или свойства. При наследовании от таких интерфейсов такие одинаковые методы или свойства сливаются в один: type IShape = interface procedure Draw; property X: integer read; property Y: integer read; end; IBrush =
Минимум интерфейсов
Минимум интерфейсов Правило Минимума Интерфейсов ограничивает общее число информационных каналов, связывающих модули системы:Каждый модуль должен поддерживать связь с возможно меньшим числом других модулей.Связь между модулями может осуществляться различными