c# 委托(Delegate)

委托是c#中一个重要的概念。

一:委托

委托是和类一样的用户自定义类型。

二:委托的声明

既然委托也和类一样是一种类型,那么在它被用来创建变量之前该声明。

//声明一个普通的类
public class Student
{

}

//声明一个委托类型
public delegate void Show(string hint);

//声明一个方法
public void Show(string hint)
{
   //some codes here.
}    

可以看到,声明一个委托类型和声明一个方法非常像。

 

格式:

1.用delegate关键字修饰

2.返回类型+委托类型名字+参数列表

 

三:实例化委托

//声明一个委托
public delegate void ShowMessage(string hint);

//声明一个要被委托的方法,该方法的返回类型的,参数都和我们声明的委托一样
public void ShowName(string name)
{
    MessageBox.Show(name);
}



//直接调用方法
//ShowName("233");

//实例化一个委托 在实例化一个委托的时候,需要给一个参数,这个参数就是要被执行的方法名字。
ShowMessage sm = new ShowMessage(ShowName);
//执行委托  实际上就是帮忙调用一下方法
sm("2333");

例如:上面的代码中我声明了一个ShowMessage的委托类型。其实简单来看,我们可以把委托看成一个可以用来帮忙执行方法的东西。Delegate在英文里是代表的意思。意思是我声明的这个委托可以帮忙执行一些别的方法。

只不过对帮忙执行的方法有条件,被执行的方法的返回类型和参数必须要和我声明的委托一样。

在上面的例子中就是,任何一个返回值是void,参数是一个string类型的方法都可以被我声明的ShowMessage这个委托代替执行。

 

四:委托 += -=

+=:添加

-=:减去

 public void ShowSex(string sex)
 {
      MessageBox.Show(sex);
 }
ShowMessage sm;
sm = ShowName;
sm += ShowSex;

给委托再添加一个方法。表明委托要帮忙执行两个方法。

减去则相反。

可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。

五:WinForm中委托的使用

在WinForm中,给一个按钮添加一个Click事件,只要在事件那个托盘那里找到Click事件。双击就行,ide会帮你做很多事情。

但是如果要为一个在后台创建的Button添加Click事件时,就要写另外的代码了。

 

public Form1()
{
    InitializeComponent();

       //在后台添加一个Button按钮
       Button btn = new Button();
       //给属性赋值
       btn.Text = "新添加的按钮";
       //给Button添加事件
       btn.Click +=new EventHandler(button1_Click);
}
private void button1_Click(object sender, EventArgs e)
{
          
}

 

在给Button添加Click事件时,用到了委托。

Button的Click的定义:(在编辑器里找到Click按F12,可以跳到对应的定义)

public event EventHandler Click;

这里public event 这两个词都是关键字,而后面的EventHandler则是Click的类型

再EventHandler 按F12跳到它的定义

public delegate void EventHandler(object sender, EventArgs e);

这就很好解释了。

系统声明了一个名字叫EventHandler的委托。而Button的Click正是EventHandler类型。

我们添加Click事件的时候,实际上就是给委托的调用。

 

posted @ 2017-09-29 20:56  5只猫  阅读(961)  评论(0编辑  收藏  举报