Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Делегаты





Начнем с определения понятия делегата. Попросту говоря, делегат представляет собой объект, который может ссылаться на метод. Следовательно, когда создается делегат, то в итоге получается объект, содержащий ссылку на метод. Более того, метод можно вызывать по этой ссылке. Иными словами, делегат позволяет вызывать метод, на который он ссылается.

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

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

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

Самое главное, что делегат может служить для вызова любого метода с соответствующей сигнатурой и возвращаемым типом. Более того, вызываемый метод может быть методом экземпляра, связанным с отдельным объектом, или же статическим методом, связанным с конкретным классом. Значение имеет лишь одно: возвращаемый тип и сигнатура метода должны быть согласованы с теми, которые указаны в объявлении делегата.

// Простой пример применения делегата.

using System;

// Объявить тип делегата.

delegate string StrMod(string str);

class DelegateTest

{

// Заменить пробелы дефисами.

static string ReplaceSpaces(string s)

{

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

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

}

// Удалить пробелы.

static string RemoveSpaces(string s)

{

string temp = "";

int i;

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

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

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

return temp;

}

// Обратить строку.

static string Reverse(string s)

{

string temp = "";

int i, j;

Console.WriteLine("Обращение строки.");

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

temp += s[i];

return temp;

}

static void Main()

{

// Сконструировать делегат.

StrMod strOp = new StrMod(ReplaceSpaces);

string str;

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

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

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);

}

}

Замена пробелов дефисами.

Результирующая строка: Это-простой-тест.

 

Удаление пробелов.

Результирующая строка: Этопростойтест.

 

Обращение строки.

Результирующая строка:.тсет йотсорп отЭ

 

Главный вывод из данного примера заключается в следующем: в тот момент, когда происходит обращение к экземпляру делегата strOp, вызывается метод, на который он ссылается. Следовательно, вызов метода разрешается во время выполнения, а не в процессе компиляции.

Date: 2015-09-02; view: 373; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.009 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию