• 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事件的时候,实际上就是给委托的调用。

  • 相关阅读:
    <转>使用IdentifyTask查询图层属性
    转:Java+blazeds+Flex的例子 .
    转 ArcGIS Runtime 加载SHAPE数据的另一种方式动态图层 .
    序列密码之A5
    哈希函数之MD5
    DjangoRestFramework使用总结
    公钥密码之RSA
    Request Line is too large (xxxx > 4094) 问题处理
    古典密码之仿射密码
    Linux重定向
  • 原文地址:https://www.cnblogs.com/MzwCat/p/7612756.html
Copyright © 2020-2023  润新知