本文主要是介绍关于事件,也很好理解 可以将delegate和event比作*,只是一种标示,delegate就相当于函数指针...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
只要将委托的含义理解了,再看一个比较简单的例子,就很好理解事件了。
1定义事件
2使用委托定义事件
3订阅事件
4引发事件。
下面是转载!!
C#中的事件处理函数:
C#中的事件处理函数是一个具有特定参数形式的委托对象,其形式如下:
其中第一个参数(sender)指明了触发该事件的对象,第二个参数(e)包含了在事件处理函数中可以被运用的一些数据。上面的MyEventArgs类是从EventArgs类继承过来的,后者是一些更广泛运用的类,如MouseEventArgs类、ListChangedEventArgs类等的基类。对于基于GUI的事件,你可以运用这些更广泛的、已经被定义好了的类的对象来完成处理;而对于那些基于非GUI的事件,你必须要从EventArgs类派生出自己的类,并将所要包含的数据传递给委托对象。下面是一个简单的例子:
{
publicstringm_id;
}
在事件处理函数中,你可以通过关键字event来引用委托对象,方法如下:
现在,我们来创建两个类,通过这两个类我们可以知道C#完成事件处理的机制是如何工作的。在我们的实例中,A类将提供事件的处理函数,并在步骤3中创建委托对象同时将事件处理函数包含在其中,同上所述,事件处理函数的参数形式必须和委托对象的参数形式相一致。然后,A类将委托对象传递给B类。当B类中的事件被触发后,A类中的事件处理函数就相应的被调用了。下面是示例代码:
// 步骤1:声明委托对象
public delegate void MyHandler1( object sender,MyEventArgse);
public delegate void MyHandler2( object sender,MyEventArgse);
// 步骤2:创建事件处理函数的方法
class A
{
publicconststringm_id="ClassA";
publicvoidOnHandler1(objectsender,MyEventArgse)
{
Console.WriteLine("IaminOnHandler1andMyEventArgsis{0}",e.m_id);
}
publicvoidOnHandler2(objectsender,MyEventArgse)
{
Console.WriteLine("IaminOnHandler2andMyEventArgsis{0}",e.m_id);
}
//步骤3:创建委托对象,并事件处理函数包含在其中同时设置好将要触发事件的对象
publicA(Bb)
{
MyHandler1d1=newMyHandler1(OnHandler1);
MyHandler2d2=newMyHandler2(OnHandler2);
b.Event1+=d1;
b.Event2+=d2;
}
}
// 步骤4:通过委托对象(也就是触发事件)来调用被包含的方法
class B
{
publiceventMyHandler1Event1;
publiceventMyHandler2Event2;
publicvoidFireEvent1(MyEventArgse)
{
if(Event1!=null)
{
Event1(this,e);
}
}
publicvoidFireEvent2(MyEventArgse)
{
if(Event2!=null)
{
Event2(this,e);
}
}
}
public class MyEventArgs:EventArgs
{
publicstringm_id;
}
public class Driver
{
publicstaticvoidMain()
{
Bb=newB();
Aa=newA(b);
MyEventArgse1=newMyEventArgs();
MyEventArgse2=newMyEventArgs();
e1.m_id="Eventargsforevent1";
e2.m_id="Eventargsforevent2";
b.FireEvent1(e1);
b.FireEvent2(e2);
}
}
这篇关于关于事件,也很好理解 可以将delegate和event比作*,只是一种标示,delegate就相当于函数指针...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!