Встроенные универсальные типы

Я считал где-нибудь, что EventHandler является встроенным универсальным типом. Почему то, что так? Кто-то мог объяснить меня способы различать универсальные и неуниверсальные типы?

Спасибо, Abhi.

================

Я читаю Основу Разработки приложений Microsoft.NET Framework 2-й выпуск для подготовки к MCTS. В первой главе был вопрос как указано ниже:

Какое из следующего является примерами встроенных универсальных типов? (Выберите все, что применяется.) A. Nullable B. Булевская переменная C. EventHandler D. Система. Рисование. Точка

Ответ вопроса является A и C согласно книге. Опция A в порядке, но не была уверена в опции C. Кто-то может объяснить?

1
задан Tim Robinson 30 June 2010 в 11:03
поделиться

5 ответов

Чтобы ответить на вопрос, вам, в конце концов, нужно найти имя каждого типа в индексе MSDN. Nullable отображается как Nullable . EventHandler появляется дважды, с суффиксом и без него. По сути, это отдельные типы.

0
ответ дан 2 September 2019 в 23:24
поделиться

T - это тип EventArgs, обрабатываемый обработчиком события (поэтому T: EventArgs )

0
ответ дан 2 September 2019 в 23:24
поделиться

В 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 ).

См. здесь и здесь для ознакомления с дженериками.

0
ответ дан 2 September 2019 в 23:24
поделиться

Есть два типа: EventHandler and EventHandler. Очевидно, что первый не является общим, а второй является.

2
ответ дан 2 September 2019 в 23:24
поделиться

Вопрос плохо сформулирован, но задается вопрос, какие из типов являются универсальными (или имеют общие версии). Ответ - EventHandler и Nullable , поскольку Boolean и Point не имеют общих эквивалентов.

0
ответ дан 2 September 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: