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

13.1.5Тело интерфейса

В теле_интерфейса определяются члены этого интерфейса.

тело_интерфейса: { объявления_элементов_интерфейсанеобязательно }

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

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

объявления_членов_интерфейса: объявление_членов_интерфейса объявления_членов_интерфейса объявление_членов_интерфейса

объявление_членов_интерфейса: объявление_метода_интерфейса объявление_свойства_интерфейса объявление_события_интерфейса объявление_индексатора_интерфейса

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

Члены интерфейса неявно имеют уровень доступа «public». Включение модификаторов в объявления членов интерфейса приведет к возникновению ошибки компилирования. В частности, члены интерфейсов не могут объявляться с модификаторами abstract, public, protected, internal, private, virtual, override и static.

Например:

public delegate void StringListEvent(IStringList sender);

public interface IStringList { void Add(string s);

int Count { get; }

event StringListEvent Changed;

string this[int index] { get; set; } }

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

Объявление_интерфейса создает новую область объявления (§3.3), а объявления_членов_интерфейса, содержащиеся непосредственно в объявлении_интерфейса, вводят в эту область объявления новых членов. К объявлениям_членов_интерфейса применяются следующие правила:

  • Имя метода должно отличаться от имен всех свойств и событий, объявленных в том же интерфейсе. Помимо этого подпись (§3.6) метода должна отличаться от подписей всех других методов, объявленных в том же интерфейсе, а два метода, объявленные в одном интерфейсе, не могут иметь подписи, отличающиеся только модификаторами ref и out.

  • Имя свойства или события должно отличаться от имен всех остальных членов, объявленных в том же интерфейсе.

  • Подпись индексатора должна отличаться от подписей всех остальных индексаторов, объявленных в том же интерфейсе.

Унаследованные члены интерфейса не относятся к области объявления этого интерфейса. Таким образом, в интерфейсе разрешается объявить член с именем или подписью унаследованного члена. В этом случае говорят, что член производного интерфейса скрывает члена базового интерфейса. Скрытие унаследованного члена не считается ошибкой, однако в этом случае компилятор выводит предупреждение. Чтобы не выводить такие предупреждения, объявление члена производного интерфейса должно содержать модификатор new, который указывает, что данный производный член должен скрывать базовый член. Эта тема более подробно рассматривается в §3.7.1.2.

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

Обратите внимание, что члены в классе object не являются, строго говоря, членами какого-либо интерфейса (§13.2). Тем не менее, члены в классе object доступны при поиске членов интерфейса любого типа (§7.4).

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