Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора теория(полная).doc
Скачиваний:
0
Добавлен:
22.11.2019
Размер:
123.9 Кб
Скачать

Интерфейсы. Операции is и as.

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

Интерфейс имеет следующие свойства: И подобен абстрактному базовому классу: любой неабстрактный тип, наследующий интерфейс, должен реализовать все его члены. Невозможно создать экземпляр интерфейса напрямую. Интерфейсы могут содержать методы, свойства, индексаторы и события в качестве членов. Интерфейсы не содержат реализации методов. Как классы, так и структуры способны наследовать от нескольких интерфейсов. Интерфейс может быть унаследован от нескольких интерфейсов. Элементы интерфейса всегда открыты (public по определению) и модификаторы защиты при их объявлении также не указываются. Объявляется интерфейс с помощью спец ключевого слова interface: interface IИмя { содержимое }

операция is бинарная (двухоперандная). Возвращает значение true, если тип объекта совместим с указанным интерфейсом и false – в противном случае.

Name is IName. Name – имя объекта,IName – имя интер.

С помощью оператора is можно определить, имеет ли рассматриваемый объект заданный тип.

Форма записи: выражение is ТИП Здесь тип элемента выражение сравнивается с элементом ТИП. ЕСЛИ ТИП элемента выражение совпадает (или совместим) с элементом ТИП, возвращает true.

Операция as бинарная возвращает ссылку на член-интерфейс объекта. IName i = Name as IName; Здесь i – ссылка на интерфейс. Если тип данного объекта не поддерживает данный интерфейс, операция as возвращает null. Говорят, что при использовании данной операции реализуется доступ через интерфейсную ссылку. После этого допустим вызов

i.ИмяЭлементаИнтерфейса;

выражение as тип - используемый элемент выражение участвует в попытке приведения его к типу, заданному элементом тип. В случае успешного выполнения этой операции возвращается ссылка на тип. В противном случае возвращается нулевая ссылка. Оператор as в некоторых случаях предлагает удобную альтернативу оператору is .

Можно объявить массив интерфейсных объектов:

IName[] Имя = { new Type1(), new Type2() …};

и тогда в цикле c помощью инструкции

Имя[i].ИмяЭлементаИнтерфейса

Примечание 1. Как следует из записи, здесь также работает механизм неявного приведения ссылки производного класса к ссылке базового. Примечание 2. Интерфейс чаще всего применяется для типов различных иерархий, так как в пределах одной иерархии наследования удобнее использовать виртуальные функции.

using System;

namespace Интерфейс

{interface IName {} interface IInter {}

class A : IName {}

class Program

{static void Main()

{A a = new A();

if (a is IName) Console.WriteLine("тип данного объекта поддерживает данный интерфейс");

else Console.WriteLine("тип данного объекта не поддерживает данный интерфейс");

IInter i = a as IInter;

if (i == null) Console.WriteLine("тип данного объекта не поддерживает данный интерфейс");

else Console.WriteLine("тип данного объекта поддерживает данный интерфейс"); }}}

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