深入解析C#编程中的事件(2)
下面的例子介绍了事件句柄如何附加到上面的类Button的实例中:
public class LoginDialog: Form
{
Button OkButton;
Button CancelButton;
public LoginDialog() {
OkButton = new Button(...);
OkButton.Click += new EventHandler(OkButtonClick);
CancelButton = new Button(...);
CancelButton.Click += new EventHandler(CancelButtonClick);
}
void OkButtonClick(object sender, Event e) {
// Handle OkButton.Click event
}
void CancelButtonClick(object sender, Event e) {
// Handle CancelButton.Click event
}
}
这里,构造函数LoginDialog创建了两个Button实例,并且把事件句柄附加到事件Click中。
事件成员是典型域,就像上面的Button例子中所示。在每个事件消耗一个域存储的情况是不可接受的,一个类可以声明事件属性来替代事件域,并且使用私有机制来存储基本的代表。(设想在某种情况下,大多数事件都是未处理的,每个事件使用一个域就不能被接受。使用属性而不是域的能力允许开发人员在空间和时间上面取得一个折中方案。)
在例子中
class Control: Component
{
// Unique keys for events
static readonly object mouseDownEventKey = new object();
static readonly object mouseUpEventKey = new object();
// Return event handler associated with key
protected Delegate GetEventHandler(object key) {...}
// Set event handler associated with key
protected void SetEventHandler(object key, Delegate handler) {...}
// MouseDown event property
public event MouseEventHandler MouseDown {<
相关新闻>>
- 发表评论
-
- 最新评论 更多>>