C#简单委托示例——让你一看就会的demo
委托
1、 什么是委托?
委托就是具有相同签名和返回值类型的有序方法列表
它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递
- 是一种引用类型
- 方法的列表称为调用列表
- 当委托被调用时,它调用列表中的每个方法
如图:

2、 委托的声明
先来看看委托是如何声明的

a、委托类型的声明看上去与方法的声明很类似,有返回类型和签名。返回类型和签名指定了委托接受的方法的形式
b、委托类型与方法声明的不同之处:
▲ 委托是以关键字delegate开头的
▲ 委托没有方法主体
3、 委托的应用
给大家写个简单易懂的实例,看完就知道委托时怎么一回事了
先创建两个窗体Form1和Form2,点击Form1中的按钮弹出Form2,可以在Form2中点击按钮改变Form1的背景色

接下来,我们来看看里面的具体代码,看看用委托是如何实现的
Form1里面的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace delegateWindowsForms
{
//首先声明一个无返回值、无参数的委托
public delegate void MyDel();
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} //打开第二个窗口
private void button1_Click(object sender, EventArgs e)
{
MyDel del = new MyDel(ChangeColor); //实例化一个委托,把改变颜色的方法放到容器里面
del += ChangeButtonText;//再向容器里添加改变按钮标题的方法
Form2 frm2 = new Form2(del); //把委托挡着参数,传给frm2。这样frm2就可以调用了
frm2.ShowDialog();
} //改变第二个窗口背景颜色为红色
public void ChangeColor()
{
this.BackColor = Color.Red;
} //改变“改变第一个Form”的名称为”骚年,我已经变色了“
public void ChangeButtonText()
{
this.button1.Text = "骚年,我已经变色了";
}
}
}
Form2里面的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace delegateWindowsForms
{
public partial class Form2 : Form
{
MyDel delChange;
public Form2(MyDel del)
{
InitializeComponent();
this.delChange = del;
} //颜色改变按钮的点击事件
private void button1_Click(object sender, EventArgs e)
{
delChange(); //委托调用
}
}
}
运行代码,点击Form1中的按钮,弹出Form2,
在Form2中点击改变Form1颜色按钮,可以发现,Form1的背景色瞬间变为红色,并且“改变第一个Form”的名称变为”骚年,我已经变色了“

这样我们就跨窗体操作了控件。
仔细观察以下两句代码我们可以知道,如何向委托这个容器添加方法。
当实例化委托后,我们可以用“+=”向委托里面继续添加方法;
如代码中所写:
MyDel del = new MyDel(ChangeColor); //实例化一个委托,把改变颜色的方法放到容器里面
del += ChangeButtonText;//再向容器里添加改变按钮标题的方法
小结:委托是面向对象的,它定义方法签名的类型,可以与具有兼容签名的任何方法关联。
我们可以通过委托调用方法。委托用于将方法作为参数传递给其他方法。
C#简单委托示例——让你一看就会的demo的更多相关文章
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- Rapidjson的简单使用示例
很早就想用用Markdown了,一直没机会.今天就来试一下 先放个目录: Rapidjson的简单使用示例 rapidjson官方教程 本示例所用环境 示例代码与注释 rapidjson官方教程 如果 ...
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- hadoop环境安装及简单Map-Reduce示例
说明:这篇博客来自我的csdn博客,http://blog.csdn.net/lxxgreat/article/details/7753511 一.参考书:<hadoop权威指南--第二版(中文 ...
- EasyHook远注简单监控示例 z
http://www.csdn 123.com/html/itweb/20130827/83559_83558_83544.htm 免费开源库EasyHook(inline hook),下面是下载地址 ...
- Web Service简单入门示例
Web Service简单入门示例 我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...
- GDAL中MEM格式的简单使用示例
GDAL库中提供了一种内存文件格式--MEM.如何使用MEM文件格式,主要有两种,一种是通过别的文件使用CreateCopy方法来创建一个MEM:另外一种是图像数据都已经存储在内存中了,然后使用内存数 ...
- html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
这篇文章主要介绍了html5本地存储的localstorage .本地数据库.sessionStorage简单使用示例,需要的朋友可以参考下 html5的一个非常cool的功能,就是web stora ...
- hydra简单使用示例
本内容为网上收集整理,仅作为备忘!! hydra简单使用示例: 破解https: # hydra -m /index.php -l muts -P pass.txt 10.36.16.18 https ...
随机推荐
- python学习:列表
列表 a = ['abc','bcd','cde','def','efg']print(a)列表的操作:增删改查 1)查:切片print(a[1:3]) #从'bcd'取到'cde',列表取值顾头不顾 ...
- 详谈kafka的深入浅出
第一:kafka的介绍,kafka官网:http://kafka.apache.org/ http://www.jasongj.com/2015/03/10/KafkaColumn1/ kafka的简 ...
- 2018-2019-20175324实验一《Java开发环境的熟悉》实验报告
2018-2019-20175324实验一<Java开发环境的熟悉>实验报告 实验内容与结果 一.Java开发环境的熟悉-1 1.实验要求: 0 参考实验要求 1 建立“自己学号exp ...
- hive-issue-inserting-records-to-partitioned-table
hive-issue-inserting-records-to-partitioned-table Hi Sam, Recently we upgraded our cluster from HDP2 ...
- Android Studio 错误: 非法字符: '\ufeff'
右下角:选UTF-8 convert一下,再重新编译..不知道为什么,本来好像就是UTF-8好奇怪. 还看到一个方法但我没试过,放在这里万一下次又遇见了这样的问题呢 右下角将UTF-8 convert ...
- unix的发展
转载http://blog.51cto.com/1193432/1671058
- seed实验——Set-UID Program Vulnerability实验
一.实验描述 Set-UID是Unix OS中的一个·非常重要的安全机制.当一个Set-UID程序运行的时候,它具有代码拥有者的权限.举个例子,如果代码的拥有者是root用户,那么不论任何用户运行该程 ...
- 实战深度学习(下)OpenCV库
在上一节中,我们讲到了OpenCV库的安装,现在我们来进行实战,看如何利用Python来调用OpenCV库. 一: 如果您的电脑是win10的系统,那么请您按下win键,再按下空格键,输入Python ...
- 数据库sql常见优化方法
以前刚开始做项目的时候,开发经验尚浅,每次遇到查询比较慢时,项目经理就会问:是不是又用select * 了?查询条件有没有加索引?一语惊醒梦中人,赶紧检查..果然如此! 有时我们写sql语句时,没有考 ...
- 全面盘点当前Android后台保活方案的真实运行效果(截止2019年前)
本文原作者“minminaya”,作者网站:minminaya.cn,为了提升文章品质,即时通讯网对内容作了幅修订和改动,感谢原作者. 1.引言 对于IM应用和消息推送服务的开发者来说,在Androi ...