简单理解和使用 C# 委托与事件
2024-10-20 11:36:32
委托和事件
委托:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
好的,简单了解了一下委托,接下来我们就自己来声明一个委托。
//声明了一个 具有两个string类型参数返回值为空 的委托类型
public delegate void MyDelegate(string item1, string item2);
接下来我们就声明一个委托对象
//声明委托对象
public MyDelegate myDelegate;
继续下来我们就要为这个委托对象给予实际参数
//调用委托
myDelegate(textBox1.Text,textBox2.Text);
下面我们来看完整的代码
//声明了一个 具有两个string类型参数返回值为空 的委托类型
public delegate void MyDelegate(string item1, string item2); public partial class SubWindow : Form
{ //定义一个委托对象
public MyDelegate myDelegate; private void btnSure_Click(object sender, EventArgs e)
{
//调用委托
myDelegate(textBox1.Text,textBox2.Text);
}
}
然后我们再从另一个类里来实现这个委托
//为委托赋值 并调用委托
private void button1_Click(object sender, EventArgs e)
{
SubWindow sw = new SubWindow(); //eg1: 将[方法]赋值给委托 【直接用方法赋值】
sw.myDelegate = AddListView; //eg2: 将[Lambda表达式]赋值给委托【Lambda表达式】
sw.myDelegate = (a, b) =>
{
this.listView1.Items.Add(a);
this.listView1.Items.Add(b);
}; //eg3: 将[委托]赋值给委托 【匿名委托】
sw.myDelegate = delegate(a, b)
{
this.listView1.Items.Add(a);
this.listView1.Items.Add(b);
};
} //和委托形参列表一致的方法
public void AddListView(string item1,string item2)
{
this.listView1.Items.Add(item1);
this.listView1.Items.Add(item2);
}
委托的用法就是这样的,现在我们来看一下事件 ,首先 声明 在委托的基础上才能声明事件
//定义一个事件
public event MyEvent myEvent;
//调用事件
myEvent(textBox1.Text,textBox2.Text);
下面看事件的具体声明和使用
//注册事件
private void button1_Click(object sender, EventArgs e)
{
SubWindow sw = new SubWindow(); //注册事件 方式一
sw.myEvent += AddListView; //注册事件 方式二
sw.myEvent += (a, b) =>
{
this.listView1.Items.Add(a);
this.listView1.Items.Add(b);
};
} //和事件形参列表一致的方法
public void AddListView(string item1, string item2)
{
this.listView1.Items.Add(item1);
this.listView1.Items.Add(item2);
} //声明了一个 具有两个string类型参数返回值为空 的委托类型
public delegate void MyDelegate(string item1, string item2); public partial class SubWindow : Form
{ //定义一个事件
public event MyEvent myEvent; //调用事件
private void btnSure_Click(object sender, EventArgs e)
{
//调用事件
myEvent(textBox1.Text, textBox2.Text);
}
}
总结:事件就是委托。
最新文章
- Mysql bench执行sql语句批量操作数据所遇到的问题
- 关于struts2上传图片临时文件
- Java中常用的字符编码-解析
- mantis增加密码修改
- Connect them
- Linux下smi/mdio总线驱动
- bestcoder.hdu.edu.cn
- Swing-布局管理器之FlowLayout(流式布局)-入门
- 关于引用(python中的伪指针)的理解
- Docker 核心技术之镜像
- 11. cookie_session_原生ajax_readyState的值_同源策略_跨域_jsonp的使用
- 《图解HTTP》读书笔记(三:无状态协议/cookie管理状态)
- C#-委托(十七)
- Error watching file for changes: EMFILE
- LIBS入门
- 虚拟机提示:无法打开内核设备“\\.\Global\vmx86”: 系统找不到指定的文件
- Using NHibernate with SQLite
- Python - 3MySQL 数据库连接
- Java与GIS的联系
- hack vba password, en useful...
热门文章
- 机器学习技法实现(一):AdaBoost- Decision Stump (AdaBoost - 决策树的基于Matlab的实现)
- python实践项目九:操作文件-修改文件名
- 一起来学Spring Cloud | 第七章:分布式配置中心(Spring Cloud Config)
- (三)linux 学习 --操作文件和目录
- Python规范:用用assert
- java.IO.EOFException异常
- drf复习(一)--原生djangoCBV请求生命周期源码分析、drf自定义配置文件、drf请求生命周期dispatch源码分析
- LOJ3123 CTS2019 重复 KMP自动机、DP、多项式求逆
- WPF 程序如何移动焦点到其他控件
- 14-4 ADO.NET简介