c# - 既然我们有了泛型,是否还需要 EventArg 类

标签 c# generics eventargs

使用泛型,是否有理由创建特定的派生 EventArg 类

现在您似乎可以通过通用实现简单地即时使用它们。

我是否应该检查所有示例并删除我的 eventArg 类(StringEventArgs、MyFooEventArgs 等)

public class EventArgs<T> : EventArgs
{
    public EventArgs(T value)
    {
        m_value = value;
    }

    private T m_value;

    public T Value
    {
        get { return m_value; }
    }
}

最佳答案

您所描述的本质上是 tuples ,用于特定目的的分组值。它们在 functional programming 中是一个有用的结构并且很好地支持这种风格。

缺点是它们的值没有命名,并且需要上下文才能理解。 EventArgs 就其本质而言,通常在远离其相关上下文的情况下使用。因此,元组式的 EventArgs 可能会让消费者感到非常困惑。

假设我们有一个事件表明某个除法已经完成,它带有分子、分母和结果:

public event EventHandler<EventArgs<double, double, double>> Divided;

事件处理程序有一些歧义:

private void OnDivided(object sender, EventArgs<double, double, double> e)
{
    // I have to just "know" this - it is a convention

    var numerator = e.Value1;
    var denominator = e.Value2;
    var result = e.Value3;
}

用代表事件的 EventArgs 会更清楚:

private void OnDivided(object sender, DividedEventArgs e)
{
    var numerator = e.Numerator;
    var denominator = e.Denominator;
    var result = e.Result;
}

通用可重用 EventArgs 类以表达意图为代价简化了机制的开发。

关于c# - 既然我们有了泛型,是否还需要 EventArg 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/311432/

相关文章:

java - 枚举的通用输入参数编译错误

c# - += delegate {} 是将自定义 eventargs 附加到 UI 控件事件的正确方法吗?

c# - 右键单击固定应用程序时添加任务选项

c# - LINQ,查询的大过滤器

java - 使用java中的Collections.sort()对列表中具有空值的多个字段进行排序?

java - ArrayList 包含错误的类型对象,没有明确的原始类型转换

c# - 有人可以用最外行的术语向我解释如何使用 EventArgs 吗?

c# - 模拟静态方法 Activator.CreateInstance 以返回另一个类的模拟

c# - StackExchange.Redis - 无法解释的超时异常问题