Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

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

Методы интерфейса объявляются с использованием объявлений_методов_интерфейса:

объявление_метода_интерфейса: атрибутынеобязательно newнеобязательно тип_возвращаемого_значения идентификатор список_параметров_типа ( список_формальных_параметровнеобязательно ) предложения_ограничений_параметров_типанеобязательно ;

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

Каждый формальный тип параметра метода интерфейса должен быть безопасным при вводе (§13.1.3.1), а тип возвращаемого значения – void или безопасный при выводе. Более того, каждое ограничение типа класса, типа интерфейса и типа параметра на любой тип параметра метода должно быть безопасным при вводе.

Эти правила обеспечивают безопасность типа при каждом ковариантном или контравариантном использовании интерфейса. Например,

interface I<out T> { void M<U>() where U : T; }

является недействительным, поскольку использование T в качестве ограничения параметра типа на U небезопасно при вводе.

Если бы это ограничение не располагалось в этом месте, стало бы возможным нарушение безопасности типа следующим образом:

class B {} class D : B {} class E : B {} class C : I<D> { public void M<U>() {…} } … I<B> b = new C(); b.M<E>();

Это означает вызов C.M<E>. Но данный вызов требует, чтобы E было производным от D, таким образом безопасность типа будет под угрозой.

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

Свойства интерфейса объявляются с использованием объявлений_свойств_интерфейса:

объявление_свойства_интерфейса: атрибутынеобязательно newнеобязательно тип идентификатор { методы_доступа_к_интерфейсу }

методы_доступа_к_интерфейсу: атрибутынеобязательно get ; атрибутынеобязательно set ; атрибутынеобязательно get ; атрибутынеобязательно set ; атрибутынеобязательно set ; атрибутынеобязательно get ;

В объявлении свойства интерфейса атрибуты и идентификатор имеют такой же смысл, что и в объявлении свойства класса (§10.7).

Методы доступа в объявлении свойства интерфейса соответствуют методам доступа в объявлении свойства класса (§10.7.2) за тем исключением, что тело метода доступа должно всегда быть точкой с запятой. Таким образом, методы доступа просто указывают, каким является свойство: доступным на чтение и запись, только на чтение или только на запись.

Тип свойства интерфейса должен быть безопасным при выводе, если существует метод доступа get, а также безопасным при вводе, если существует метод доступа set.

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

События интерфейса объявляются с использованием объявлений_событий_интерфейса:

объявление_события_интерфейса: атрибутынеобязательно newнеобязательно event тип идентификатор ;

В объявлении события интерфейса атрибуты и идентификатор имеют такой же смысл, что и в объявлении события класса (§10.8).

Тип события интерфейса должен быть безопасным при вводе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]