委托

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. connector for python实验

    MySQL 是最流行的关系型数据库管理系统,如果你不熟悉 MySQL,可以阅读 MySQL 教程. 下面为大家介绍使用 mysql-connector 来连接使用 MySQL, mysql-conne ...

  2. DOM-基本概念及使用

    1.获取元素的方式总结 1.根据 id 的属性的值获取元素,返回值是一个元素对象 document.getElementById("id属性的值"); 2.根据标签名获取元素,返回 ...

  3. Linux 管理进程

    探查进程 参数 描述 -A 显示所有进程 -N 显示与指定参数不符的所有进程 -a 显示除控制进程(session leader1)和无终端进程外的所有进程 -d 显示除控制进程外的所有进程 -e 显 ...

  4. koa2学习(一)

    前期准备: node环境 npm包管理工具 安装Koa npm install --save koa 第一个程序 创建index.js const Koa = require('koa'); cons ...

  5. Raiden Charge

    2017年10月22 周日 这是个元气满满 值得纪念的一天(不好意思走错片场了) 虽然有各种乱遭的客观元素 但我们队确确实实地打铁了 那些我们轻视的 野鸡(误)大学 都在我们前面 都说知耻而后勇 虽然 ...

  6. MySQL 分区建索引

    200 ? "200px" : this.width)!important;} --> 介绍 mysql分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张 ...

  7. 浅析Diffie–Hellman

    一.作者 这个密钥交换方法,由惠特菲尔德·迪菲(Bailey Whitfield Diffie).马丁·赫尔曼(Martin Edward Hellman)于1976年发表. 二.说明 它是一种安全协 ...

  8. 史上最全java面试题

    基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...

  9. 微信小程序写tab切换

    微信小程序之tab切换效果,如图: 最近在学习微信小程序并把之前的公司app搬到小程序上,挑一些实现效果记录一下(主要是官方文档里没说的,毕竟官方文档只是介绍功能) .wxml代码: <view ...

  10. 【RL-TCPnet网络教程】第9章 RL-TCPnet网络协议栈移植(uCOS-III)

    第9章        RL-TCPnet网络协议栈移植(uCOS-III) 本章教程为大家讲解RL-TCPnet网络协议栈的uCOS-III操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移 ...