Студопедия

КАТЕГОРИИ:


Архитектура-(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)

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




8.1 Делегаты

Делегат — это объект, который может ссылаться на метод. Создавая делегат, по сути, создаёте объект, который может содержать ссылку на метод. Более того, этот метод можно вызватьпосредством соответствующей ссылки. Таким образом, делегат может вызывать метод,на который он ссылается.

Ссылка по существупредставляет собой адрес памяти. Следовательно, ссылка на объект — это адрес объекта. Даже несмотря на то, что метод не является объектом, он тоже имеет отношениек физической области памяти, а адрес его точки входа — это адрес, к которому происходит обращение при вызове метода. Этот адрес можно присвоить делегату. Если ужделегат ссылается на метод, этот метод можно вызвать посредством данного делегата.

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

Делегат объявляется с помощью ключевого слова delegate. Общая форма объявления делегата имеет следующий вид:

delegate тип_возврата имя(список_параметров);

Здесь элемент тип_возврата представляет собой тип значений, возвращаемых методами, которые этот делегат будет вызывать. Имя делегата указывается элементом имя. Параметры, принимаемые методами, которые вызываются посредством делегата,задаются с помощью элемента список_параметров. Делегат может вызывать толькотакие методы, у которых тип возвращаемого значения и список параметров (т.е. егосигнатура) совпадают с соответствующими элементами объявления делегата.

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

 

using System;

// Объявляем делегат.

delegate string strMod(string str);

classDelegateTest {

// Метод заменяет пробелы дефисами

static string replaceSpaces(string a) {

Console.WriteLine("Замена пробелов дефисами.");

return a.Replace(' ', ' - ');

}

static string removeSpaces(string a) {// Метод удаляет пробелы.

string temp = "";

int i;

Console.WriteLine("Удаление пробелов.");

for(i=0; i < a.Length; i++)

if (a[i]!= ' f) temp += a[i];

return temp;

}

static string reverse(string a) {// Метод реверсирует строку,

string temp = "";

int i, j;

Console.WriteLine("Реверсирование строки.");

for(j=0, i=a.Length-1; i >= 0; i--, j++)

temp += a[i];

return temp;

}

public static void Main() {

strMod strOp = new strMod(replaceSpaces); // Создание делегата.

string str;

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

str = str0p("ЭTO простой тест.");

Console.WriteLine("Результирующая строка: " + str);

Console.WriteLine();

strOp = new strMod(removeSpaces);

str = strOp("Это простой тест.");

Console.WriteLine("Результирующая строка: " + str);

Console.WriteLine();

strOp = new strMod(reverse);

str = strOp("Это простой тест.");

Console.WriteLine("Результирующая строка: " + str);

}}

Результаты выполнения этой программы выглядят так:




Поделиться с друзьями:


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


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



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




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