针对c#中是委托,以及与委托连在一起的事件,讲一下我个人的理解。本节先讲什么是委托,后续讲到与委托紧密相关事件,以及委托带来的好处等等。
一、什么是委托
首先,委托是一个类,理解这一点很重要。既然是类,那么我们一般在使用一个类的时候,都是先调用该类的构造函数实例化出该类的一个对象,然后再操作该对象。委托也是如此,不过委托类很特殊,只有一个构造函数,构造函数参数为另一个函数的函数名。
二、委托的作用
委托是一个特殊的类,上面说了,该类的构造函数参数是另一函数的函数名。实例化出来的对象就指向该函数地址,可以理解为委托类对象就是保存了另一函数地址的指针或者引用。那么在调用委托类对象的时候,执行的是委托类对象指向的函数。
三、实例说明
新建一项目,在窗体代码中添加如下代码
先定义如下的委托声明,这个委托有一String型的参数,并返回一bool型值,委托与委托指向的函数必须具有相同的参数与返回值。
private delegate bool TestDelegate(string strMsg);
委托声明遵循格式:[访问修饰符] delegate 返回值类型 委托标识符名字([形参列表]);
定义委托类对象
private TestDelegate objTestDelegate;
定义一函数,用来绑定委托,函数参数与返回值需与委托声明保持一致。
private bool TestFucn(string strMsg)
{
MessageBox.Show(strMsg);
return true;
}
在窗体上放一个Name为btnCallDelegate的按钮,在click事件中添加如下代码
private void btnCallDelegate_Click(object sender, EventArgs e)
{
//委托绑定
if (objTestDelegate == null)
objTestDelegate = new TestDelegate(TestFucn);
//委托调用
objTestDelegate.Invoke("This is a test");
}
从上面可以看出,在实例化委托对象后,调用委托实际上是调用了该委托指向的函数。
完整类代码如下:
public partial class test : Form
{
public test()
{
InitializeComponent();
}
//委托定义
private delegate bool TestDelegate(string strMsg);
//委托类对象声明
private TestDelegate objTestDelegate;
//委托指向的函数定义
private bool TestFucn(string strMsg)
{
MessageBox.Show(strMsg);
return true;
}
private void btnCallDelegate_Click(object sender, EventArgs e)
{
//委托绑定
if (objTestDelegate == null)
objTestDelegate = new TestDelegate(TestFucn);
//委托调用
objTestDelegate.Invoke("This is a test");
}
}