Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование делегатов вместо интерфейсов
И делегаты, и интерфейсы позволяют конструктору классов отделять объявление типов от реализации. Определенный интерфейс может быть унаследован и реализован любым классом или структурой. Делегат может быть создан для метода в любом классе, если метод соответствует подписи метода для делегата. Ссылка на интерфейс или делегат могут быть использованы объектом, не имеющим данных о классе, реализующем интерфейс или метод делегата. Учитывая эти сходные признаки, когда в конструкторе классов следует использовать делегат, а когда следует использовать интерфейс? Делегат следует использовать в следующих ситуациях: · Используется шаблон разработки событий. · Желательно инкапсулировать статический метод. · Вызывающему не требуется доступ к другим свойствам, методам или интерфейсам объекта для реализации метода. · Желательно простое построение. · Классу может потребоваться несколько реализаций метода. Интерфейс следует использовать в следующих ситуациях: · Существует группа связанных методов, которые могут быть вызваны. · Классу потребуется только одна реализация метода. · Класс, использующий интерфейс, будет передавать этот интерфейс другим типам классов и интерфейсов. · Реализуемый метод связан с типом или идентификатором класса: например, методы сравнения. Хорошим примером использования интерфейса с одним методом вместо делегата является IComparable или более общая версия IComparable<(Of <(T>)>). В IComparable объявляется метод CompareTo, возвращающий целое число, указывающее отношение (меньше, равно или больше) между двумя объектами одинакового типа. Можно использовать IComparable в качестве основы для алгоритма сортировки. В основе алгоритма сортировки можно использовать и метод сравнения делегатов, но такой подход не является оптимальным. Возможность сравнения относится к классу, а алгоритм сравнения не изменяется при выполнении, поэтому лучше использовать интерфейс с одним методом. Covariance and Contravariance in Delegates Covariance and contravariance provide a degree of flexibility when you match method signatures with delegate types. Covariance permits a method to have a more derived return type than what is defined in the delegate. Contravariance permits a method with parameter types that are less derived than in the delegate type. Example 1 (Covariance) Description This example demonstrates how delegates can be used with methods that have return types that are derived from the return type in the delegate signature. The data type returned by SecondHandler is of type Dogs, which derives from the Mammals type that is defined in the delegate.
Code
Ковариация и контрвариация в делегатах Ковариация и контрвариация обеспечивают дополнительную гибкость при сравнении подписей методов с типами делегатов. Ковариация позволяет методу иметь тип возвращаемого значения, степень наследования которого больше, чем указано в делегате. Контрвариация использовать метод с типами параметров, степень наследования которых меньше, чем у типа делегата. Пример 1 (ковариация) Описание В данном примере демонстрируется использование делегатов с методами, типы возвращаемых значений которых являются производными от типа возвращаемого значения в подписи делегата. Тип данных, возвращаемый SecondHandler, является типом Dogs, производным от заданного в делегате типа Mammals. Код ß------ Example 2 (Contravariance) Description This example demonstrates how delegates can be used with methods that have parameters of a type that are base types of the delegate signature parameter type. With contravariance, you can now use one event handler in places where, previously, you would have had to use separate handlers. For example, you can now create an event handler that accepts an EventArgs input parameter and use it with the Button.MouseClick event that sends a MouseEventArgs type as a parameter, and also with TextBox.KeyDown event that sends a KeyEventArgs parameter. Code
Пример 2 (контрвариация) Описание В данном примере демонстрируется использование делегатов с методами, параметры типа которых являются базовыми типами типа параметра подписи делегата. Контрвариация позволяет использовать один обработчик событий в тех случаях, когда приходилось использовать несколько отдельных обработчиков. Например, можно создать обработчик событий, который принимает входной параметр EventArgs и использует его вместе с событием Button.MouseClick, отправляющим в качестве параметра тип MouseEventArgs, а также с событием TextBox.KeyDown, отправляющим параметр KeyEventArgs. Код ß-----
|
|||||||
Последнее изменение этой страницы: 2017-01-19; просмотров: 180; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.47.253 (0.005 с.) |