博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 委托(Delegate)
阅读量:6151 次
发布时间:2019-06-21

本文共 1824 字,大约阅读时间需要 6 分钟。

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

 

转载于:https://www.cnblogs.com/MzwCat/p/7612756.html

你可能感兴趣的文章
Vue之项目搭建
查看>>
app内部H5测试点总结
查看>>
[TC13761]Mutalisk
查看>>
Data Wrangling文摘:Non-tidy-data
查看>>
while()
查看>>
常用限制input的方法
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>