简单理解和使用 C# 委托与事件
委托和事件
委托:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用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);
}
}
总结:事件就是委托。
简单理解和使用 C# 委托与事件的更多相关文章
- C#基础篇 - 理解委托和事件
1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...
- 通俗理解C#委托和事件
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...
- C#委托与事件--简单笔记
委托 简单记录点东西 适合似懂非懂的朋友看看 委托类型用来定义和响应应用程序中的回调. 借此可以设计各种有面向对象特性的代码模式.下面要说的事件在我看来就是委托的一种实现,再深一步讲,利用委托加事件, ...
- 【详细】【转】C#中理解委托和事件
文章是很基础,但很实用,看了这篇文章,让我一下回到了2016年刚刚学委托的时候,故转之! 1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具 ...
- C# 委托和事件,简单示例说明问题
先看看示例效果 按照国际惯例,得先说说概念. 委托(C# 编程指南) 事件(C# 编程指南) 以上内容来自MSDN. 委托源码 [委托] 概念和代码都有了.剩下的就是应用了,要是只知道概念不会用,那还 ...
- [转载]C#委托与事件--简单笔记
原文地址:https://www.cnblogs.com/joeymary/p/8486358.html 委托 简单记录点东西 适合似懂非懂的朋友看看委托类型用来定义和响应应用程序中的回调.借此可以设 ...
- 【详细】【转】C#中理解委托和事件 事件的本质其实就是委托 RabbitMQ英汉互翼(一),RabbitMQ, RabbitMQ教程, RabbitMQ入门
[详细][转]C#中理解委托和事件 文章是很基础,但很实用,看了这篇文章,让我一下回到了2016年刚刚学委托的时候,故转之! 1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托 ...
- 对C#中事件的简单理解
对于C#中的事件,我举了个简单的例子来理解事件及其处理. 这个例子中母亲是事件的发布者,事件是吃饭了.儿子和父亲是事件的订阅者,各自的Eat方法是处理事件的方法. 下面是详细的加注的例子: using ...
- C# 委托、事件、表达式树理解
1.什么是委托? 委托是一种动态调用方法的类型,属于引用型. 委托是对方法的抽象和封装.委托对象实质上代表了方法的引用(即内存地址) 所有的异步都是委托 委托就是函数当入参 委托被各种语法糖遮 ...
随机推荐
- System.gc()介绍
System.gc()用于垃圾收集器,调用垃圾收集器将回收未使用的 System.gc()进行回收的准则: 回收没有被任何可达变量指向的对象 JDK实现 public static void gc() ...
- 考前最后的感叹:CSP2019 Bless All! & AFO
因为没有退路,所以勇往直前. ----来自高二老年选手小蒟蒻XY Upd:凉凉了,你们都稳了...我看来是超不过准考证号了qwq[大哭] Upd:来自联考txdy的神仙gcz Upd:久远的回忆:会不 ...
- jQuery “没有属性”选择器
可以使用.not() 或 :not() 选择器. $('.container:not([data-timestamp])') 或者 $('.container').not('[data-timesta ...
- LeetCode 151. 翻转字符串里的单词(Reverse Words in a String)
151. 翻转字符串里的单词 151. Reverse Words in a String
- Python的运算符和编码
1.格式化输出 1.有两种方式: 1.1.%的方式 addr = "我家住在%s" % ("黄土高坡") 1.2.format()的方式 addr = &quo ...
- 电路板工艺中的NPTH和PTH
今天收到PCB生产公司发来的工程咨询单 Q1:请问贵司资料中的沉头孔是做PTH沉头还是做NPTH沉头? 好吧,鄙人见识少,第一次听说PTH和NPTH,查资料吧,一张图看一下就明白了. 另一种比较小的P ...
- 网络 TCP三次握手,四次挥手详解
三次握手,四次挥手可以说是炙手可热的面试题了,来看看它究竟长什么样子吧! 我们先把流程图贴上来 : 为什么这么复杂? 因为TCP是可靠性传输. 确认可靠传输的前提: TCP连接管理机制 用TCP首部 ...
- Django的Xadmin使用
Django Xadmin 通常在实际的开发当中, 除了前后端分离的项目, 还有一些前后端不分离的项目, 这样我们在访问不分离的页面的时候, 就可以通过Django自带的admin管理模块来轻松实现后 ...
- 1. RDD概念
1.1 RDD为什么会产生? RDD 是 Spark 的基石,是实现 Spark 数据处理的核心抽象.那么 RDD 为 什么会产生呢? Hadoop 的 MapReduce 是一种基于数据集的工作模式 ...
- python爬虫-喜马拉雅_晚安妈妈睡前故事
这里先说下思路: 1.首先要获取当前书的音频信息 '''获取当前书的音频信息''' all_list = [] for url in self.book_url: r = requests.get(u ...