委托和事件

委托:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用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);
}
}

  

总结:事件就是委托。

最新文章

  1. Mysql bench执行sql语句批量操作数据所遇到的问题
  2. 关于struts2上传图片临时文件
  3. Java中常用的字符编码-解析
  4. mantis增加密码修改
  5. Connect them
  6. Linux下smi/mdio总线驱动
  7. bestcoder.hdu.edu.cn
  8. Swing-布局管理器之FlowLayout(流式布局)-入门
  9. 关于引用(python中的伪指针)的理解
  10. Docker 核心技术之镜像
  11. 11. cookie_session_原生ajax_readyState的值_同源策略_跨域_jsonp的使用
  12. 《图解HTTP》读书笔记(三:无状态协议/cookie管理状态)
  13. C#-委托(十七)
  14. Error watching file for changes: EMFILE
  15. LIBS入门
  16. 虚拟机提示:无法打开内核设备“\\.\Global\vmx86”: 系统找不到指定的文件
  17. Using NHibernate with SQLite
  18. Python - 3MySQL 数据库连接
  19. Java与GIS的联系
  20. hack vba password, en useful...

热门文章

  1. 机器学习技法实现(一):AdaBoost- Decision Stump (AdaBoost - 决策树的基于Matlab的实现)
  2. python实践项目九:操作文件-修改文件名
  3. 一起来学Spring Cloud | 第七章:分布式配置中心(Spring Cloud Config)
  4. (三)linux 学习 --操作文件和目录
  5. Python规范:用用assert
  6. java.IO.EOFException异常
  7. drf复习(一)--原生djangoCBV请求生命周期源码分析、drf自定义配置文件、drf请求生命周期dispatch源码分析
  8. LOJ3123 CTS2019 重复 KMP自动机、DP、多项式求逆
  9. WPF 程序如何移动焦点到其他控件
  10. 14-4 ADO.NET简介