Исследование объекта делегата
Исследование объекта делегата
Добавим в имеющийся пример вспомогательную функцию с именем DisplayDelegateInfo(). Она будет выводить имена методов, поддерживаемых поступающим типом, производным от System.Delegate, а также имя класса, определяющего метод. Для этого мы выполним цикл по элементам массива System.Delegate, возвращенного из GetInvocationList(), вызывая свойства Target и Method для каждого объекта.
static void DisplayDelegateInfo(Delegate delObj) {
// Вывод имен каждого из элементов
// списка вызовов делегата.
foreach (Delegate d in delQbj.GetInvocationList()) {
Console.WriteLine("Имя метода: {0}", d.Method);
Console.WriteLine("Имя типа: {0}", d.Target);
}
}
Если изменить метод Main() так, чтобы он вызывал этот новый вспомогательный метод, то вы увидите вывод, показанный на рис. 8.3.

Рис. 8.3. Проверка списка вызовов делегата
Обратите внимание на то, что здесь имя типа (SimpleMath) свойством Target не отображается. Причина в том, что наш делегат BinaryOp указывает на статические методы, следовательно, нет объекта, на который нужно ссылаться! Но если изменить методы Add() и Subtract() так, чтобы они перестали быть статическими, можно создать экземпляр типа SimpleMath и указать методы для вызова так, как показано ниже.
static void Main(string[] args) {
Console.WriteLine("***** Пример делегата ***** ");
// Делегаты .NET могут указывать на методы экземпляра.
SimpleMath m = new SimpleMath();
BinaryOp b = new BinaryOp(m.Add);
// Вывод информации об объекте.
DisplayDelegateInfо(b);
Console.WriteLine(" 10 + 10 равно {0}", b(10, 10));
Console.ReadLine();
}
Теперь вы должны увидеть вывод, показанный на рис. 8.4.

Рис. 8.4. Проверка списка вызовов делегата (новая попытка)
Исходный код. Проект SimpleDelegate размещен в подкаталоге, соответствующем главе 8.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Исследование ключевых слов
Исследование ключевых слов Чтобы провести исследование ключевых слов, нужно выбрать в разделе
Понятия объекта и экземпляра объекта
Понятия объекта и экземпляра объекта В начале этой главы мы познакомились с типами данных, определяющими саму природу данных и набор действий, которые можно выполнять с этими данными. Так, строковый тип определяет, что данные этого типа представляют собой строки —
Глава 3 Исследование
Глава 3 Исследование Наряду с разработкой шахт и созданием потрясающих предметов можно исследовать мир – это одно из основных занятий в Minecraft. Можно отыскать жителей деревень и обмениваться с ними предметами, найти редкие растения, лошадей, которых вы можете
Исследование пещер
Исследование пещер При исследовании пещер особенно легко заблудиться, поскольку они выглядят однообразно. Отследить свой путь легко, если размещать факелы только на правой стене пещеры. Простой способ отследить свой путь – поместить факелы только на правой стене
Понятия объекта и экземпляра объекта
Понятия объекта и экземпляра объекта В начале этой главы мы познакомились с типами данных, определяющими саму природу данных и набор действий, которые можно выполнять с этими данными. Так, строковый тип определяет, что данные этого типа представляют собой строки —
7.5 Исследование MTU по пути
7.5 Исследование MTU по пути При пересылке большого объема данных (например, при копировании файлов по сети) с одного хоста на другой размер датаграмм существенно влияет на производительность. Заголовки IP и TCP требуют не менее 40 дополнительных байт.? Если данные
23.3 Исследование соседей
23.3 Исследование соседей На момент выхода книги еще продолжалась работа над очень важным набором спецификаций для автоматизации функций связи. К ним можно отнести: Router Discovery Исследование маршрутизаторов. Поиск маршрутизаторов в локальной связи. Prefix Discovery Исследование
Тип делегата .NET
Тип делегата .NET Перед тем как дать формальное определение делегата .NET, давайте обсудим соответствующие перспективы. В Windows API для создания объектов, называемых функциями обратного вызова, предполагается использовать указатели функций (подобные указателям C). Используя
Определение делегата в C#
Определение делегата в C# Чтобы создать делегат в C#, вы должны использовать ключевое слово delegate. Имя делегата может быть любым. Однако делегат должен соответствовать методу, на который этот делегат будет указывать. Предположим, например, что нам нужно создать делегат с
Простейший пример делегата
Простейший пример делегата В начале освоения приемов работы с делегатами у программиста может возникать много вопросов. Поэтому мы начнем с рассмотрения очень простого примера, в котором используется созданный нами тип делегата BinaryOp. Вот программный код, который мы
Более совершенный пример делегата
Более совершенный пример делегата Чтобы продемонстрировать более интересные варианты использования делегатов, мы добавим в класс Car пару членов-переменных логического типа. Первый из добавляемых членов предназначен для индикации того, что автомобиль необходимо помыть
Роль делегата AsyncCallback
Роль делегата AsyncCallback Вместо того чтобы выяснять у делегата, завершился ли асинхронный вызов метода, лучше позволить делегату информировать поток вызова о выполнении задания. Чтобы реализовать такое поведение, вы должны предъявить экземпляр делегата System.AsyncCallback методу
10.3. Doom: социологическое исследование
10.3. Doom: социологическое исследование История пользующейся спросом игры Doom фирмы Id software иллюстрирует способы, которыми давление со стороны рынка и эволюция продукта могут серьезно изменить соотношение сил в споре между закрытостью и открытостью исходных текстов.Когда