C# 哪种结构更好,将事件处理程序作为arg传递,还是侦听事件触发?
我想知道有关事件处理程序使用的适当类结构 我有年龄类,当年龄值更改时,它会导致操作。我有一个Person类,它的成员变量是Age对象 在我的第一个场景中,Person类将其事件处理程序作为其构造函数的参数传递给Age对象C# 哪种结构更好,将事件处理程序作为arg传递,还是侦听事件触发?,c#,events,event-handling,C#,Events,Event Handling,我想知道有关事件处理程序使用的适当类结构 我有年龄类,当年龄值更改时,它会导致操作。我有一个Person类,它的成员变量是Age对象 在我的第一个场景中,Person类将其事件处理程序作为其构造函数的参数传递给Age对象 class Age { private readonly EventHandler _valueChanged; private int _value; public int Value { get { return _val
class Age
{
private readonly EventHandler _valueChanged;
private int _value;
public int Value
{
get { return _value; }
private set
{
_value = value;
RaiseValueChangedEvent();
}
}
public Age(EventHandler handler)
{
_valueChanged = handler;
}
protected void RaiseValueChangedEvent()
{
var handler = _valueChanged;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
}
class Person
{
private readonly Age _age;
public Person()
{
_age = new Age(OnAgeChanged);
}
protected void OnAgeChanged(object sender, EventArgs e)
{
// Do what is necessary.
}
}
在我的第二个场景中,Age类有一个事件,Person类监听它的事件触发
class Age
{
public event EventHandler ValueChanged;
private int _value;
public int Value
{
get { return _value; }
private set
{
_value = value;
RaiseValueChangedEvent();
}
}
protected void RaiseValueChangedEvent()
{
var handler = ValueChanged;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
}
class Person
{
private readonly Age _age = new Age();
public Person()
{
_age.ValueChanged += OnAgeChanged;
}
protected void OnAgeChanged(object sender, EventArgs e)
{
// Do what is necessary.
}
}
哪种结构更好?为什么呢?首先让我们在这里指出几点:
是一个多播委托,它允许广播消息以发出动作发生的信号事件
是一种表示方法引用的类型,我们可以使用该方法调用它们delegate
事件
附言。
以下是Jon Skeet的精彩演讲,他详细解释了活动和代表之间的区别非常感谢您的友好回答。我完全忘记了事件是多播委托。我决定选择第二种方法,因为当Age
的值发生变化时,可以更轻松地调用多个操作。@user4134476顺便说一句,我添加了一个链接,指向Jon Skeet撰写的一篇精彩文章,您可能想再次感谢您的好意。这篇文章帮助我理解了事件和代理之间的区别。