事件是C#的重要概念,在发生其他类或者对象需要关注手,本类或对象可以通过时间来通知它们,发送事件的类称为事件的发送者,而接收事件的类称为事件的订阅户。
委托:
委托调用方法流程,以下面的实例作详细阐述,
1.首先需要定义一个委托,使用的是关键字delegate,如下:
public delegate void Mydelegate(string str);
他的返回类型和参数必须和它调用的方法的返回类型和参数相匹配。
2.接下来是定义该委托需要调用的方法,本例定义了两个方法,用于对字段s进行不同修改,如下:
public void Method1(string str)
{
s=5;
}
public void Method2(string str)
{
s=7;
}
3.创建委托对象,对声明的方法进行包含,如下:
Test test=new Test();
Mydelehate d1=new Mydelegate(test.Method1);
Mydelehate d2=new Mydelegate(test.Method2);
4.最后就是完成方法的调用,如下:
public void Call(Mydelegate d,string str)
{
d(str);
Console.WriteLine(str);
}
这里是用了两个参数,第一个参数是创建委托的对象,它能直接通过调用方法的参数完成对方法的调用,第二个参数是调用的方法的参数。
委托的事件处理程序
1.首先还是需要定义委托,事件中的委托和普通委托有区别的,它的参数形式如下:
public delegate void MyHandler1(object sender,MyEventArgs e);
事件中的委托具有两个参数,第一个参数表示事件的触发对象,第二个参数表示处理事件的对象,它从EventArgs类继承而来,其中:
public class MyEventArgs:EventArgs
{
public string str;
}
2.接下来需要在Class2中完成事件的声明和触发,如下:
public Class2
{
public event MyEventHandler1 Event1;
public void mEvent1(MyEventArgs e)
{
if(Event1!=null)
{
Event1(this,e);
}
}
}
class Class1
{
public Class1(Class2)
{
MyEventHandler1 mh1=new MyEventHandler1(Method1);
calss.Event1+=mh1;
}
public void Method1(object sender,MyEventAgrs e)
{
Console.WriteLine("处理事件结果?;"+e.str);
}
}