.NET имеет встроенный EventArgs <T>?

Я готовлюсь создавать универсальный класс EventArgs для события args, которые несут отдельный аргумент:

public class EventArg<T> : EventArgs
{
    // Property variable
    private readonly T p_EventData;

    // Constructor
    public EventArg(T data)
    {
        p_EventData = data;
    }

    // Property for EventArgs argument
    public T Data
    {
        get { return p_EventData; }
    }
}

Прежде чем я сделаю это, C# встраивали ту же функцию на язык? Я, кажется, вспоминаю случайную встречу с чем-то как этот, когда C# 2.0 вышел, но теперь я не могу найти его.

Или, другими словами, я должен создать свой собственный универсальный класс EventArgs, или C# обеспечивает тот?Спасибо за помощь.

81
задан David Veeneman 22 July 2010 в 18:30
поделиться

3 ответа

Нет. Вы, вероятно, думали о EventHandler , который позволяет вам определять делегата для любого конкретного типа EventArgs.

Я лично не считаю, что EventArgs так же хорошо подходит. Информация, используемая в качестве «полезной нагрузки» в аргументах событий, должна, на мой взгляд, быть настраиваемым классом, чтобы сделать ее использование и ожидаемые свойства очень понятными. Использование универсального класса не позволит вам поставить на место осмысленные имена. (Что представляют собой «Данные»?)

63
ответ дан 24 November 2019 в 09:41
поделиться

Проблема с универсальным типом заключается в том, что даже если DerivedType наследуется от BaseType, EventArgs (DerivedType) не будет наследовать от EventArgs (BaseType). Таким образом, использование EventArgs (BaseType) предотвратит последующее использование производной версии типа.

1
ответ дан 24 November 2019 в 09:41
поделиться

Причина, по которой этого не существует, заключается в том, что в итоге произойдет следующее: вы реализуете это, а затем, когда вы перейдете к заполнению T, вы должны создать класс с сильно типизированными однозначными свойствами, который действует как пакет данных для вашего event arg, но на полпути реализации этого вы понимаете, что нет причин, по которым вы не можете просто сделать этот класс наследуемым от EventArgs и назвать его хорошим.

Если только вам не нужна просто строка или что-то подобное базовое для вашего мешка данных, в этом случае, вероятно, в .NET есть стандартные классы EventArgs, которые предназначены для любой простой цели, которую вы преследуете.

-4
ответ дан 24 November 2019 в 09:41
поделиться
Другие вопросы по тегам:

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