Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

тюмгу / Lab9_ЯП_2018_2С

.pdf
Скачиваний:
5
Добавлен:
08.12.2019
Размер:
224.39 Кб
Скачать

Лабораторная работа №6. Расширенные возможности языка программирования C#.

1 Цель и порядок работы

Познакомиться с расширенными возможностями языка программирования C#, такими, как интерфейсы и делегаты.

Порядок выполнения работы:

ознакомиться с описанием лабораторной работы;

получить задание у преподавателя, согласно своему варианту;

написать программу и отладить ее на ЭВМ.

2 Краткая теория

2.1Интерфейсы

ВC# для полного отделения структуры класса от его реализации используется механизм интерфейсов.

Интерфейс является расширением идеи абстрактных классов и методов. Синтаксис интерфейсов подобен синтаксису абстрактных классов. Объявление интерфейсов выполняется с помощью ключевого слова interface. При этом методы в интерфейсе не поддерживают реализацию. Членами интерфейса могут быть методы, свойства, индексаторы и события.

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

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

Синтаксис:

[атрибуты] [модификаторы] interface Имя_интерфейса[:список_родительских_интерфейсов]

{

обьявление_свойств_и_методов

}

Пример: interface Species

{

string Species(); void Feed();

}

class Cheetah:Animal,Species

{

private string ScientificName;

public string Species()

{return ScientificName;} public void Feed()

{Weight++;}

}

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

Возможно наследование интерфейсов. В этом случае используется синтаксис,

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

2.2 Делегаты

Делегат — это объект, имеющий ссылку на метод. Делегат позволяет выбрать вызываемый метод во время выполнения программы. Фактически значение делегата – это адрес области памяти, где находится точка входа метода.

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

не во время компилирования.

Делегат объявляется с помощью ключевого слова delegate, за которым указывается тип возвращаемого значения, имя делегата и список параметров вызываемых методов.

Синтаксис:

delegate тип_возвращаемого_значения имя_делегата (список_параметров);

Характерной особенностью делегата является возможность его использования для вызова любого метода, который соответствует подписи делегата. Это дает возможность определить во время выполнения программы, какой из методов должен быть вызван.

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

Многоадресность делегатов Многоадресность — это способность делегата хранить несколько ссылок на различные

методы, что позволяет при вызове делегата инициировать эту цепочку методов.

Для создания цепочки методов необходимо создать экземпляр делегата, и пользуясь операторами + или += добавлять методы к цепочке. Для удаления метода из цепочки

2

используется оператор - или -=. Делегаты, хранящие несколько ссылок, должны иметь тип

возвращаемого значения void.

3 Контрольные вопросы

1)Что понимается под термином «интерфейс»?

2)Чем отличается синтаксис интерфейса от синтаксиса абстрактного класса?

3)Какое ключевое слово языка C# используется для описания интерфейса?

4)Поддерживают ли реализацию методы интерфейса?

5)Какие объекты языка C# могут быть членами интерфейсов?

6)Каким количеством классов может быть реализован интерфейс?

7) Может ли класс реализовывать множественные интерфейсы?

8)Необходима ли реализация методов интерфейса в классе, включающем этот интерфейс?

9)Какой модификатор доступа соответствует интерфейсу?

10)Допустимо ли явное указание модификатора доступа для интерфейса?

11)Приведите синтаксис интерфейса в общем виде. Проиллюстрируйте его фрагментом программы на языке C#.

12)Возможно ли создание ссылочной переменной интерфейсного типа?

13)Возможно ли наследование интерфейсов?

14)Насколько синтаксис наследования интерфейсов отличается от синтаксиса наследования классов?

15)Необходимо ли обеспечение реализации в иерархии наследуемых интерфейсов?

16)Что понимается под термином «делегат»?

17)В чем состоят преимущества использования делегатов?

18)В какой момент осуществляется выбор вызываемого метода в случае использования делегатов?

19)Что является значением делегата?

20)Какое ключевое слово языка C# используется для описания делегатов?

21)Приведите синтаксис делегата в общем виде. Проиллюстрируйте его фрагментом программы на языке C#.

22)Возможно ли использование делегата для вызова метода, соответствующего подписи делегата?

23)Возможен ли вызов метода в том случае, если его подпись не соответствует подписи делегата?

24)Что понимается под термином «многоадресность»?

25)В чем состоит практическое значение многоадресности?

26)Каким образом осуществляется создание цепочки методов для многоадресных делегатов?

27)Какие операторы языка C# используются для создания цепочки методов для многоадресных делегатов?

28)Каким образом осуществляется удаление цепочки методов для многоадресных делегатов?

29)Какие операторы языка C# используются для удаления цепочки методов для многоадресных делегатов?

30)Каким должен быть тип возвращаемого значения для многоадресных делегатов?

4 Задание

1.Реализовать для иерархии из лабораторной работы №8 механизм интерфейсов, при этом один из классов должен реализовывать как минимум 2 интерфейса.

2.Использовать для проверки всех методов данного класса многоадресный делегат.

3

3.Отладить и протестировать программу.

4.Варианты заданий определяются согласно списка студентов в группе.

4

Соседние файлы в папке тюмгу