使用泛型,是否有理由创建特定的派生 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/