委托和事件

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

  1. C#基础篇 - 理解委托和事件

    1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...

  2. 通俗理解C#委托和事件

    引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...

  3. C#委托与事件--简单笔记

    委托 简单记录点东西 适合似懂非懂的朋友看看 委托类型用来定义和响应应用程序中的回调. 借此可以设计各种有面向对象特性的代码模式.下面要说的事件在我看来就是委托的一种实现,再深一步讲,利用委托加事件, ...

  4. 【详细】【转】C#中理解委托和事件

    文章是很基础,但很实用,看了这篇文章,让我一下回到了2016年刚刚学委托的时候,故转之! 1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具 ...

  5. C# 委托和事件,简单示例说明问题

    先看看示例效果 按照国际惯例,得先说说概念. 委托(C# 编程指南) 事件(C# 编程指南) 以上内容来自MSDN. 委托源码 [委托] 概念和代码都有了.剩下的就是应用了,要是只知道概念不会用,那还 ...

  6. [转载]C#委托与事件--简单笔记

    原文地址:https://www.cnblogs.com/joeymary/p/8486358.html 委托 简单记录点东西 适合似懂非懂的朋友看看委托类型用来定义和响应应用程序中的回调.借此可以设 ...

  7. 【详细】【转】C#中理解委托和事件 事件的本质其实就是委托 RabbitMQ英汉互翼(一),RabbitMQ, RabbitMQ教程, RabbitMQ入门

    [详细][转]C#中理解委托和事件   文章是很基础,但很实用,看了这篇文章,让我一下回到了2016年刚刚学委托的时候,故转之! 1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托 ...

  8. 对C#中事件的简单理解

    对于C#中的事件,我举了个简单的例子来理解事件及其处理. 这个例子中母亲是事件的发布者,事件是吃饭了.儿子和父亲是事件的订阅者,各自的Eat方法是处理事件的方法. 下面是详细的加注的例子: using ...

  9. C# 委托、事件、表达式树理解

    1.什么是委托? 委托是一种动态调用方法的类型,属于引用型. 委托是对方法的抽象和封装.委托对象实质上代表了方法的引用(即内存地址) 所有的异步都是委托   委托就是函数当入参   委托被各种语法糖遮 ...

随机推荐

  1. react前端模版Material-UI.类似于antd/bootstrap

    Material-UI Material-UI是一个实现了Google's Material Design设计规范的react组件库,开箱即用,使用它可以快速搭建出赏心悦目的应用界面. 文档 各种模版 ...

  2. Dubbo服务器与普通服务器的区别

    Dubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 1.什么是分布式服务框架 分布式有两个特点,分别是内聚性和透明性(比如 ...

  3. SecureCRT日志优化

    SecureCRT日志优化 用了这么多ssh软件,但对secureCRT情有独钟.今天来对做一下对SecureCRT的优化 一.手动模式: 选择"File"->"L ...

  4. Mysql中的读锁,写锁,乐观锁及事务隔离级别和并发问题

    mysql读锁,写锁,乐观锁 读锁,也叫共享锁(shared lock) SELECT * FROM table_name  WHERE ...  LOCK IN SHARE MODE 写锁,也叫排他 ...

  5. [转帖]说一说JVM双亲委派机制与Tomcat

    说一说JVM双亲委派机制与Tomcat https://www.cnblogs.com/dengchengchao/p/11844022.html 讲个故事: 以前,爱捣鼓的小明突然灵机一动,写出了下 ...

  6. PAT(B) 1060 爱丁顿数(Java:21分)

    题目链接:1060 爱丁顿数 (25 point(s)) 题目描述 英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个"爱丁顿数" E ,即满足有 E 天骑车 ...

  7. Vue.js 2.x render 渲染函数 & JSX

    Vue.js 2.x render 渲染函数 & JSX Vue绝大多数情况下使用template创建 HTML.但是比如一些重复性比较高的场景,需要运用 JavaScript 的完全编程能力 ...

  8. 【LEETCODE】47、985. Sum of Even Numbers After Queries

    package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...

  9. Asp.Net Core File的操作

    FileOption 内置类(通过服务注入) 该操作类的功能是实现对文件的删除,修改查询功能,该类基本完成了对文件的操作,同样是用最简单的代码实现了文件操作功能.

  10. Java中使用HttpPost上传文件以及HttpGet进行API请求(包含HttpPost上传文件)

    Java中使用HttpPost上传文件以及HttpGet进行API请求(包含HttpPost上传文件) 一.HttpPost上传文件 public static String getSuffix(fi ...