2010-06-30 2 views
1

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

Thanks, Abhi.

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

Читаю Foundation Microsoft .NET Framework Разработка приложений 2-е издание для подготовки к MCTS. В первой главе встал вопрос, как показано ниже: -

Какое из приведенных ниже примеров встроенных типов? (Выберите все, что применяются.) А. Nullable B. Логическое C. EventHandler D. System.Drawing.Point

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

+1

«EventHandler - это встроенный общий тип» - на каком языке? –

+1

Какой язык программирования? Что вы читали? –

+0

Тим/Питер, я обновил свое оригинальное сообщение. Язык C#. –

ответ

0

Чтобы ответить на вопрос, в конечном счете вам необходимо найти имя каждого типа в индексе MSDN. Nullable отображается как Nullable<T>. EventHandler появляется дважды, с и без <T> суффикс. Это фактически отдельные типы.

+0

Nullable также существует без '': http://msdn.microsoft.com/en-us/library/system.nullable.aspx –

2

Существует два типа: EventHandler и EventHandler<TEventArgs>. Очевидно, что первое не является общим, а второе.

+0

Существует [третий EventHandler] (http://java.sun.com/javase/6/docs/api/java/beans/EventHandler.html) :) Меньше связанных с дженериками. – aioobe

+0

Если посмотреть на , я могу сказать, что он является общим, но если вы видите вопрос, который я опубликовал в своем оригинальном посте (обновленный несколько минут назад), он не упоминает . Разве что вопрос не задавался должным образом или это просто по типу типа, мы можем выяснить, является ли оно общим или нет? –

+0

@ user366436: Оба Nullable и EventHandler существуют в общих и не общих формах. Мне кажется, это просто плохой вопрос. –

0

T является типом EventArgs в eventhanlder ручки (так T : EventArgs)

0

В C# (но это относится к Java тоже), вы можете распознать дженерик наличия типа параметров, как правило, указываются между <> скобками ,

Например, общий тип EventHandler в C# объявляются как:

public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e); 

типа TEventArgs, что parameterises делегата используются, чтобы иметь статический ввод внутри функции обработчика событий, без необходимости слепков или для определения нескольких типов делегатов для каждого типа аргументов, которые необходимо передать обработчику.

Скажем, у вас есть 2 разных события, один генерирующий объект типа T1, один из T2. Вы будете иметь два различных обработчика:

void HandleEvent1(object sender, T1 args) {...} 
void HandleEvent2(object sender, T2 args) {...} 

В C# 1.0 (не дженерики) вы можете создать свои собственные типы делегатов для 2-х событий:

delegate void Event1Handler(object sender, T1 e); 
delegate void Event2Handler(object sender, T2 e); 

и использовать их, чтобы связать ваше мероприятие с обработчики.

От C# 2.0 нет необходимости в создании новых типов делегатов, так как обработчики захвачены родовым EventHandler<> типа (TEventArgs = T1 или TEventArgs = T2).

См. here и here для введения в общий набор.

0

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

Смежные вопросы