Члены интерфейса

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

interface-member-declarations:

interface-member-declaration

interface-member-declarations   interface-member-declaration

interface-member-declaration:

interface-method-declaration

interface-property-declaration

interface-event-declaration

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

Все члены интерфейса неявно имеют открытый уровень доступа. Является ошибкой компиляции включение любых модификаторов в определения членов интерфейса.

Определение интерфейса создает новое пространство определений и определения членов интерфейса становятся членами этого пространства определений. Применяются следующие правила к определениям членов интерфейса:

Унаследованные члены интерфейса не являются частью пространства определений данного интерфейса. Соответственно в производном интерфейсе может быть определен член с именем, совпадающим с именем члена базового интерфейса, который в этом случае скрывает унаследованный член. Когда это происходит говорят, что член производного интерфейса скрывает член базового. Сокрытие унаследованного члена не является ошибкой, однако вызывает выдачу предупреждающего сообщения компилятора. Для подавления такого сообщения определение члена производного интерфейса, скрывающего член базового, должно содержать модификатор New.

Если модификатор New использует в определении члена не скрывающего другой член, то выдается предупреждающее сообщение компилятора. Для его подавления достаточно убрать модификатор из определения члена.

Свойства интерфейса

Свойства интерфейса определяются следующим образом.

interface-property-declaration:

attributesopt   Property   property-name   property-indexersopt   :   type

interface-property-accessors   End Property   property-nameopt   ;

interface-property-accessors:

attributesopt   Get   ;

attributesopt   Set   ;

attributesopt   Get   ;   attributesopt   Set   ;

attributesopt   Set   ;   attributesopt   Get   ;

property-name:

identifier

Компоненты определения свойства в интерфейсе имеют то же значение, что и в определении класса. Определения методов доступа свойства не могут содержать тела, соответственно состоят исключительно из заголовка.

Методы интерфейса

Методы интерфейса определяются следующим образом.

interface-method-declaration:

interface-sub-declaration

interface-function-declaration

interface-sub-declaration

attributesopt   Sub   identifier (  formal-parameter-listopt  )  ;

interface-function-declaration

attributesopt   Function   identifier (  formal-parameter-listopt  )  :   return-type   ;

Компоненты определения метода в интерфейсе имеют то же значение, что и в определении класса. Определение метода интерфейса не может содержать тела, соответственно состоит исключительно из заголовка.

События интерфейса

События интерфейса определяются следующим образом:

interface-event-declaration:

attributesopt   Event   identifier   :   type;

Компоненты определения события в интерфейсе имеют то же значение, что и в определении класса.

Пример

Delegate UserEvent(s: string);

Interface IMyInterface
    //Свойство
    Property Item[Index: integer]: integer
        Get;
        Set;
    End Property;
    //Методы
    Sub Run();
    Function Execute(): boolean;
    //Событие
    Event OnUserEvent: UserEvent;
End Interface;

См.также:

Интерфейсы