【发布时间】:2011-10-15 06:10:25
【问题描述】:
我正在学习活动和代表,现在开始参加多个活动。只是文档没有提供任何信息或代码示例来引发以这种方式定义的事件。您可以在下面找到一个简单的示例
示例代码
public class Person
{
private string _name;
private string _phone;
public string Name
{
get { return _name; }
set
{
_name = value;
}
}
public string Phone
{
get { return _phone; }
set
{
_phone = value;
}
}
protected EventHandlerList EventDelegateCollection = new EventHandlerList();
//define the event key
static readonly object PhoneChangedEventKey = new object();
public event EventHandler PhoneChanged
{
add
{
EventDelegateCollection.AddHandler(PhoneChangedEventKey, value);
}
remove
{
EventDelegateCollection.RemoveHandler(PhoneChangedEventKey, value);
}
}
}
我想在设置电话号码时引发事件。如果有什么听起来很时髦并且不明白我在说什么see here
更新
我想在这里澄清一些疑问。有两种方法可以实际订阅和调用事件处理程序的经典模式(as described here),其中的步骤是
- 定义充当订阅方法签名的委托。
- 定义委托的事件
- 定义引发处理程序的方法
note:上述方法为每个事件创建字段,因此消耗更多内存 reference
事件属性是您在下面执行的另一种方式
- 定义一个对象作为事件的关键
- 定义一个方法来为事件调用列表中的事件添加和删除处理程序
- 通过根据事件键确定事件处理程序来引发事件
【问题讨论】:
-
此 MSDN 链接描述了引发事件:msdn.microsoft.com/en-us/library/9aackb16%28v=VS.80%29.aspx
-
@HenkHolterman 我再说一遍,这是调用事件处理程序的经典方式,事件属性是另一种方式,请看这里msdn.microsoft.com/en-us/library/8843a9ch.aspx
-
该页面还列出了
OnMouseDown()和OnMouseUp()方法,那么您的确切问题是什么? -
@HenkHolterman 谢谢,我自己解决了这个问题,代码如下。
标签: c# events memory-management event-handling