委托和事件

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

    #!/usr/bin/python # coding:utf-8 # 绘制一个<三体>全集词云 # pip install jieba # pip install matplotlib # ...

  2. 手贱重置了mysql密码,导致登陆不进去的解决办法

    上午手残,重置了下MySQL的密码,导致用命令登陆不进去 由于版本的问题,导致网上的方法都不可用 折腾了一上午,摸索+参考官方文档,终于搞定 利用--init-file 第一步,关掉系统服务     ...

  3. SpringBoot中的@ConfigurationProperties

    有什么用 该注解的作用类似于@Value,即为组件中的属性进行赋值. 怎么用 首先是建立一个springboot的工程,不再赘述. 首先我们建立一个Person类和一个Dog类. package co ...

  4. Python3定时器任务代码

    使用threading写的一个定时器任务demo: import time import sys import signal import datetime import threading #定时器 ...

  5. 第14章 Salesforce标准对象

    14.1 Sales Cloud基本信息 Sales Cloud 会为您提供管理业务的一切功能.生成最佳潜在客户.通过销售漏斗管理业务机会,并使用现有客户培养关系.以及,预测收入.设置销售区域,并将代 ...

  6. [CF436D]Pudding Monsters

    题目大意:有一个长度为$2\times 10^5$的板,有$n(n\leqslant 10^5)$个格子$a_1,\dots,a_n$有布丁怪兽,一开始连续的怪兽算一个怪兽,有$m(m\leqslan ...

  7. c# 异步( Async ) 不是多线程

    c# 异步( Async ) 不是多线程   误解 async 在调试 xxxxAsync() 方法的时候,常常会看到调试器界面中会多出一些线程,直觉上误认为 Async 冠名的函数是多线程. 对于 ...

  8. 转 Json数据格式化

    /// <summary> /// JSON字符串格式化 /// </summary> /// <param name="json"></ ...

  9. Java调用WebService方法总结(3)--wsimport调用WebService

    wsimport是JDK自带的把WSDL转成Java的工具,可以很方便的生成调用WebService的代码.文中所使用到的软件版本:Java 1.8.0_191. 1.准备 参考Java调用WebSe ...

  10. JavaScript 数组去重的那几种方法

    数组去重是最常见的面试题,现在总结一下我所知道的几种 首先第一个就是es5 最常见的循环比较 var array= [1, 1, 2]; function test(nums) { for (var ...