Членами интерфейса являются члены, унаследованные от его базовых интерфейсов, а также члены определенные в самом интерфейсе.
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;
См.также: