




















开发时,我们几乎无时无刻不用到事件。然而对于初级开发者,包括我自己,大多数用的都是.net类库中的事件。
先看看例子:
this.Load += new System.EventHandler(this.Page_Load);
这个估计是asp.net最常用的事件了。将Page对象的Load事件委托到Page_Load()方法进行处理。
看看各成员的类型:
this 是System.Web.UI.Page类型
this.Load 是System.EventHandler类型的事件event
对象浏览器对Page.Load的解释
public event System.EventHandler Load
System.Web.UI.Control 的成员
摘要:
当服务器控件加载到 System.Web.UI.Page 对象中时发生。
[C#]
[Serializable]
public delegate void EventHandler(
object sender,
EventArgs e
);
public sealed delegate EventHandler : System.MulticastDelegate
System 的成员
摘要:
表示将处理不包含事件数据的事件的方法。
使用过程是这样,所有事件相关的东西都要依赖于一个委托delegate,先声明委托。delegate void SomeDelegate();
然后在类中定义一个该委托类型的事件:event SomeDelegate AnEvent;
在然后在对象实例化之后,事件发生之前(当然大部分是在构造函数中)将一个方法连接到委托
this.AnEvent += new SomeDelegate(this.EventRaise);
同时声明一个方法
void EventRaise(){}
最后在需要引发事件的地方调用this.AnEvent()
看个例子
class Class1
{
[STAThread]
static void Main(string[] args)
{
Test test = new Test();
}
}
public delegate void GeneralEvent_Raise () ;
public class Test
{
public event GeneralEvent_Raise GeneralEvent ;
public Test()
{
GeneralEvent += new GeneralEvent_Raise(Test_GeneralEventRaise);
GeneralEvent();
}
public void Test_GeneralEventRaise()
{
System.Console.WriteLine("Raise!");
}
}
public Test()
{
GeneralEvent += new GeneralEvent_Raise(Test_GeneralEventRaise);
GeneralEvent += new GeneralEvent_Raise(Test_GeneralEventRaise);
GeneralEvent();
}
public Test()
{
GeneralEvent += new GeneralEvent_Raise(Test_GeneralEventRaise);
GeneralEvent = null;
GeneralEvent += new GeneralEvent_Raise(Test_GeneralEventRaise);
GeneralEvent();
}
再看看,只触发了一次。用什么办法制定只有一个委托处理事件呢
GeneralEvent += new GeneralEvent_Raise(Test_GeneralEventRaise);
GeneralEvent = new GeneralEvent_Raise(Test_GeneralEventRaise);
仍然是一次。
不知道不给事件定委托是什么样子
public Test()
{
GeneralEvent();
}
异常了吧。如果想自定异常可以这样做
if ( GeneralEvent != null )
{
GeneralEvent();
}
else
{
throw new Exception("事件不会被处理!");
}
在被依赖项目中定义好委托和事件,在下级项目中实现委托并把委托+到事件上,对于一些设计时未知的处理效果会相当好
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。