Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример делегата для обычной функции

Лекция 20, 21. Делегаты и события

Делегат – особый вид класса,хранящий ссылки на методы.

Делегат – класс (ссылочный тип), инкапсулирующий (содержащий в себе) метод с указанной сигнатурой и возвращаемым типом.

 

Все делегаты являются объектами типа System.Delegate или System.MulticastDelegate.

Общий синтаксис объявления делегата:

[cпецификаторы] delegate тип возвращаемого значения метода имя делегата ([параметры]), где

delegate – ключевое слово.

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

параметры – это необязательные параметры, которые будут присутствовать у функции, на которую ссылается делегат.

Примеры объявления делегата:

delegate void MyDelegate(string s); //делегат, который может работать для всех методов, которые возвращают тип void и имеют один строковый параметр.

public delegate int mydel();

delegate double MyD (double x);

//”Почти универсальный делегат”

delegate void My (object o)

Алгоритм работы с делегатом:

1. Объявление делегата;

2. Определение метода, “подходящего” для работы с делегатом

3. В основной программе создание экземпляра делегата и связь его с определённой функцией;

4. Вызов метода через делегат.

Делегат может быть применён:

· Для обычной функции без класса;

· Для метода внутри класса.

class Program

{

//объявление делегата

delegate void MyDelegate(string s);

static void Myfunc(string s)

{

Console.WriteLine(s);

}

static void Main(string[] args)

{

//в конструкторе передается ссылка на функцию, которая делегируется (связыватся с делегатом)

MyDelegate del = new MyDelegate(Myfunc);//создание экземпляра делегата

del("Hello World");//вызов функции через делегат

Console.ReadKey();

}

}

Пример делегата для метода класса

namespace ConsoleApplication1

{

class my

{

public string mystring;//поле класса

public void Myfunc(string s)

{

// Вывод значения поля mystring, а также аргумента, переданного методу.

Console.WriteLine(mystring + s);

}

}

class Program

{

//объявление делегата

delegate void MyDelegate(string s);

static void Main(string[] args)

{

// Создадим экземпляр тестового класса.

my A = new my();

// Создадим экземпляр делегата, содержащего, помимо ссылки на сам метод, также ссылку

// на объект, для которого будет вызван метод.

MyDelegate del = new MyDelegate(A.Myfunc);

// Изменяем значение поля тестового объекта.

A.mystring = "Hello, World!";

// Вызовем метод через делегат.

del(" - from Delegate");

// Эквивалентен следующему вызову

// A.Myfunc(" - from Instance Delegate");

// Снова изменим значение поля тестового объекта.

A.mystring = "Good bye, World!";

// Снова обратимся к методу.

del(" - from Delegate");

 

Console.ReadKey(); } }}

Операции с делегатами: =,!=, +=,-=,= =.

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

С делегатами одного типа можно выполнить операции простого и сложного присваивания: =, +=,-=.

<== предыдущая лекция | следующая лекция ==>
Лекция 20. ФК в различные периоды жизни людей | Делегат для выбора методов на этапе выполнения
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 462; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.