委托

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. toLatin1 qt

    Latin1是ISO-8859-1的别名,有些环境下写作Latin-1.ISO-8859-1ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F ...

  2. centos7.5安装python3.7

    系统状态 CentOS Linux release 7.5.1804 (Core) mini版安装系统 Python-3.7.0.tgz 官方下载源码包 安装系统依赖包 # 编译必备 yum inst ...

  3. vue 时间戳 转 日期

    <text style="padding-right: 10px; color: #333; font-size: 28px" slot="value"& ...

  4. [LeetCode] Rectangle Overlap 矩形重叠

    A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coordinates of its bot ...

  5. 2019PHP面试题最全面归纳总结

    1.请选择以下代码运行的结果: <?php if ('1e3' == '1000') echo 'LOL'; ?> A 无任何输出结果  B   LOL  C 不执行且报错 解析:1e3 ...

  6. vs2013新建asp.net web 项目报错,此模板尝试加载组件程序集NuGet Package Manage

    打开vs2013,工具->扩展和更新->联机->找到NuGet Package Manager->安装->重新启动vs2013

  7. 平衡二叉树(AVL)介绍及其实现

    一.平衡二叉树 任何一个数据的查找过程都需要从根结点出发,沿某一个路径朝叶子结点前进.因此查找中数据比较次数与树的形态密切相关. 对于二叉树来说,当树中每个结点左右子树高度大致相同时,树高为logN. ...

  8. i春秋官网4.0上线啦 文末有福利

    爱瑞宝地(Everybody)期待了很久的 i春秋官网4.0上线啦 除了产品的功能更加完善 性能和体验也将大幅度提高 清新.舒适的视觉感受 搭配更加便捷的操作流程 只需一秒,扫码立即登录 即刻进入网络 ...

  9. [Swift]LeetCode1 .两数之和 | Two Sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  10. 解决classNotFound的问题的思路

    用Ctrl+Shift+t可以查看class,对于报错信息,我们把没有找到的class放到查找框里进行查看,找到之后把这个jar包放到WEB-INF的lib目录下,build path一下就可以了. ...