Я считал где-нибудь, что EventHandler является встроенным универсальным типом. Почему то, что так? Кто-то мог объяснить меня способы различать универсальные и неуниверсальные типы?
Спасибо, Abhi.
================
Я читаю Основу Разработки приложений Microsoft.NET Framework 2-й выпуск для подготовки к MCTS. В первой главе был вопрос как указано ниже:
Какое из следующего является примерами встроенных универсальных типов? (Выберите все, что применяется.) A. Nullable B. Булевская переменная C. EventHandler D. Система. Рисование. Точка
Ответ вопроса является A и C согласно книге. Опция A в порядке, но не была уверена в опции C. Кто-то может объяснить?
Чтобы ответить на вопрос, вам, в конце концов, нужно найти имя каждого типа в индексе MSDN. Nullable отображается как Nullable
. EventHandler
появляется дважды, с суффиксом
и без него. По сути, это отдельные типы.
T - это тип EventArgs, обрабатываемый обработчиком события (поэтому T: EventArgs
)
В C # (но это применимо и к Java) вы можете распознать дженерики по наличию параметров типа , обычно указываемых в скобках <>
.
Например, общий тип EventHandler в C # объявлен как:
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
Тип TEventArgs
, который параметризует делегат, используется для статической типизации внутри функции обработчика событий без необходимости приведения типов. или определить несколько типов делегатов для каждого типа аргумента, который необходимо передать обработчику.
Допустим, у вас есть 2 разных события: одно генерирует объекты типа T1
, второе - типа T2
.
У вас будет два разных обработчика:
void HandleEvent1(object sender, T1 args) {...}
void HandleEvent2(object sender, T2 args) {...}
В C # 1.0 (без дженериков) вы должны создать свои собственные типы делегатов для двух событий:
delegate void Event1Handler(object sender, T1 e);
delegate void Event2Handler(object sender, T2 e);
И использовать их для привязки вашего события к обработчикам.
Начиная с C # 2.0 нет необходимости создавать новые типы делегатов, поскольку оба обработчика захватываются общим EventHandler <>
типом ( TEventArgs
= T1
или TEventArgs
= T2
).
Есть два типа: EventHandler
and EventHandler
. Очевидно, что первый не является общим, а второй является.
Вопрос плохо сформулирован, но задается вопрос, какие из типов являются универсальными (или имеют общие версии). Ответ - EventHandler
и Nullable
, поскольку Boolean
и Point
не имеют общих эквивалентов.