委托

1、 什么是委托?

委托就是具有相同签名和返回值类型的有序方法列表

它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递

  1. 是一种引用类型
  2. 方法的列表称为调用列表
  3. 当委托被调用时,它调用列表中的每个方法

如图:

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的更多相关文章

  1. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  2. Rapidjson的简单使用示例

    很早就想用用Markdown了,一直没机会.今天就来试一下 先放个目录: Rapidjson的简单使用示例 rapidjson官方教程 本示例所用环境 示例代码与注释 rapidjson官方教程 如果 ...

  3. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  4. hadoop环境安装及简单Map-Reduce示例

    说明:这篇博客来自我的csdn博客,http://blog.csdn.net/lxxgreat/article/details/7753511 一.参考书:<hadoop权威指南--第二版(中文 ...

  5. EasyHook远注简单监控示例 z

    http://www.csdn 123.com/html/itweb/20130827/83559_83558_83544.htm 免费开源库EasyHook(inline hook),下面是下载地址 ...

  6. Web Service简单入门示例

    Web Service简单入门示例     我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...

  7. GDAL中MEM格式的简单使用示例

    GDAL库中提供了一种内存文件格式--MEM.如何使用MEM文件格式,主要有两种,一种是通过别的文件使用CreateCopy方法来创建一个MEM:另外一种是图像数据都已经存储在内存中了,然后使用内存数 ...

  8. html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例

    这篇文章主要介绍了html5本地存储的localstorage .本地数据库.sessionStorage简单使用示例,需要的朋友可以参考下 html5的一个非常cool的功能,就是web stora ...

  9. hydra简单使用示例

    本内容为网上收集整理,仅作为备忘!! hydra简单使用示例: 破解https: # hydra -m /index.php -l muts -P pass.txt 10.36.16.18 https ...

随机推荐

  1. 我们来谈谈最近最热门的微信小程序

    最近微信小程序真是火到不行,我们的经理大人也就此给我做了一定的培训.他讲的太好,我实在忍不住跟大家简单分享一下: 1.什么是微信小程序? 一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦 ...

  2. rest_framework之权限源码剖析

    权限问题 1.models.py 2.用户类型: 3.views.py: 假设订单相关业务(只有SVIP用户有权限) 假设用户信息相关业务(只有普通用户.VIP有权限) 4.运行结果: 基本使用 以上 ...

  3. PHP实现微信模板消息发送给指定用户

    使用公众号的模板消息功能,必须是认证过的服务号,需要发送微信号的openid,同一微信号在不同公众号下的openid是不同的,在公众号下是唯一的,获取不到微信号 进入公众平台  功能->模板消息 ...

  4. 在IIS上新发布的网站,样式与js资源文件加载不到(资源文件和网页同一个域名下)

    在IIS上新发布的网站,网站能打开,但样式与js资源文件加载不到(资源文件和网页是同一个域名下,例如:网页www.xxx.com/index.aspx,图片www.xxx.com/pic.png). ...

  5. ReactJs和React Native的联系和差异

    1,React Js的目的 是为了使前端的V层更具组件化,能更好的复用,它能够使用简单的html标签创建更多的自定义组件标签,内部绑定事件,同时可以让你从操作dom中解脱出来,只需要操作数据就会改变相 ...

  6. Zookeeper+Dubbo+SpringMVC环境搭建

    项目码云GIT地址:https://gitee.com/xshuai/dubbo/ 开发工具 MyEclipse 10.7 JDK 1.7 容器 Tomcat 8(运行dubbo) zookeeper ...

  7. [Swift]LeetCode336. 回文对 | Palindrome Pairs

    Given a list of unique words, find all pairs of distinct indices (i, j) in the given list, so that t ...

  8. [Swift]LeetCode339. 嵌套链表权重和 $ Nested List Weight Sum

    Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...

  9. [Swift]LeetCode822. 翻转卡片游戏 | Card Flipping Game

    On a table are N cards, with a positive integer printed on the front and back of each card (possibly ...

  10. Kubernetes---Pod控制器

    Pod作为kubernetes的最基本单元,它的控制器有以下这些 Pod的控制器: 1,  RC ( ReplicationController): 2, RS(ReplicaSet) : 3, De ...