1、了解委托(delegate)

* 委托是一种全新的面向对象语言特性,运行于.NET平台

*基于委托开发事件驱动程序变得简单

*使用委托可以大大简化多线程编程的难度

2、理解委托

*委托(delegate)可以看成是一种数据类型,它可以定义变量,不过是一种特殊的变量。

*委托定义的变量,可以接受的数值是一个或多个方法,可以理解成它是存放方法的变量,或理解成委托就是一个方法指针。

3、委托的使用方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Csharp控制台练习{class Program{//【1】、声明委托 (定义一个函数的原形:返回值+参数类型和个数)public delegate int DemoDelegate(int a, int b);//【2】、要存放的方法等具体实现功能(比如加减法)static int Add(int a, int b) { return a + b; }static int Sub(int a, int b) { return a - b; }static void Main(string[] args){//【3】、定义委托变量,并且关联要存放于该变量的方法DemoDelegate objDel = new DemoDelegate(Add);//【4】、通过委托调用方法,而不是直接调用方法Console.WriteLine( objDel(10, 20));objDel -= Add;objDel += Sub;Console.WriteLine( objDel(10, 20));Console.ReadKey();}}
}

此程序输出结果为30     -10.

使用委托的步骤:

1、声明委托:关键字delegate + 返回值 +委托名 +参数 。 返回值和参数怎么确定? 当然是要和存放的方法类型要一致了

2、委托对象的定义。

3、将委托与方法关联起来,除了在创建对象的时候关联方法也可以通过  “ += " 绑定方法,也可以通过 ”-=“ 方法解绑 来实现方法的关联。

4、通过委托调用方法。

以上就是委托关联方法的具体步骤。但是上述代码并不能体现委托的真正用处。本来用方法就能实现的功能,搞得那么复杂不是闲得慌?

委托的用途十分多,其中一个就是可以实现窗体之间的通信,或者说是数据传递。现在要实现下述功能:有多个窗体,一个是主窗体,和其他是从窗体,主窗体中有一个单击按钮,而在每个从窗体中同步显示单击按钮的次数。要知道,一个窗体无法直接调用另一个窗体的方法,也无法直接操作另一个窗体的控件属性,通过委托便可以实现。

1、从窗体代码(frmOther1.)

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 Csharp窗体练习
{public partial class frmOther1 : Form{public frmOther1(){InitializeComponent();}public void Receive(string counter){labCounter.Text = counter;}}
}

每个从窗体布局如图:只有一个label(name:labCounter)控件,代码中只多了一个Receive方法。

主窗体布局如图:一个单击按钮(btnCounter)一个复位按钮(btnClear).

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 Csharp窗体练习
{public delegate void ShowCounterDele(string counter);//【1】声明个委托,一般在类外面声明public partial class Form1 : Form{ShowCounterDele showCounterdel;                 //【2】定义委托对象public Form1(){InitializeComponent();frmOther frmother = new frmOther();frmOther1 frmother1 = new frmOther1();frmOther2 frmother2 = new frmOther2();showCounterdel += frmother.Receive;         //【3】将委托对象与方法关联起来showCounterdel += frmother1.Receive;showCounterdel += frmother2.Receive;frmother.Show();frmother1.Show();frmother2.Show();}private int count = 0;private void btnCounter_Click(object sender, EventArgs e){count++;showCounterdel(count.ToString());          //【4】、通过委托调用方法}private void btnClear_Click(object sender, EventArgs e){count=0;showCounterdel(count.ToString());}}
}

执行上面程序,点击主窗体中的按钮,从窗体会显示单击次数。点击主窗体的复位按钮然后计数归零。

C#语法:委托与方法相关推荐

  1. Unity游戏开发(C#语法):委托

    一.什么是委托 1.委托的概述 为了实现方法的参数化,提出了委托的概念.委托是一种类,是一种引用类型,可以指向一个或者多个方法,该引用类型与其他引用类型不同.在委托对象的引用中存放的不是数据的引用,而 ...

  2. 【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 批量方法委托 )

    文章目录 一.批量方法委托 二.完整代码示例 一.批量方法委托 在上一篇博客 [Groovy]MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 ) 中 , 将 ...

  3. JS window对象 Location对象 location用于获取或设置窗体的URL,并且可以用于解析URL。 语法: location.[属性|方法]...

    Location对象 location用于获取或设置窗体的URL,并且可以用于解析URL. 语法: location.[属性|方法] location对象属性图示: location 对象属性: lo ...

  4. JS对象 数组排序sort() sort()方法使数组中的元素按照一定的顺序排列。 语法: arrayObject.sort(方法函数)...

    数组排序sort() sort()方法使数组中的元素按照一定的顺序排列. 语法: arrayObject.sort(方法函数) 参数说明: 1.如果不指定<方法函数>,则按unicode码 ...

  5. 用委托的方法调用TCP通讯指令列表

    需求:TCP通讯中客户端与服务端交互会有若干中指令,例如完成一个客户度登录过程,必须先建立握手连接,然后登录,假设服务端规定这个过程中,握手连接必须先建立起来,然后才能登录,不得越级.如何让程序顺序执 ...

  6. java 匿名委托_委托,匿名方法,λ 表达式

    1.委托:委托本质上就是函数指针,但由于指针过于灵活,因此在很多语言中都采用了更加安全的替代类型,比如Delphi的对象方法和C#的委托.委托使得方法可以做为参数进行传递,极大的方便了程序的处理(事件 ...

  7. php 检查语法命令,php语法检查的方法有哪些?(代码示例)

    php中语法检查是非常有必要的,如果不检查语法,则在发生错误时无法正常工作,如果同时执行语法检查,则可能不会发生该错误,本篇文章我们就来看一看php语法检查的方法. 我们可以使用lint检查 用lin ...

  8. mod函数在计算机中实例,excel MOD函数的使用方法实例 MOD函数的公式语法及使用方法实例...

    excel MOD函数的使用方法实例 MOD函数的公式语法及使用方法实例,这个问题是我们很多人都很困惑的一个问题,excel MOD函数的使用方法实例是我们非常常用的一个东西,也是我们工作和学习中必不 ...

  9. C#进阶语法-委托和Lambda

    自定义委托 //委托方法 public static int Add(int a, int b){return a + b;} //委托方法的定义 delegate int AddDelegate(i ...

最新文章

  1. ecshop /api/client/api.php、/api/client/includes/lib_api.php SQL Injection Vul
  2. Linux安装weblogic方式,Linux下weblogic安装图解
  3. 各种 Java Thread State 第一分析法则
  4. PHP学习笔记--面向对象
  5. [转]正确配置Linux系统ulimit值的方法
  6. 页面排序(上下元素对换)
  7. Spring4.0之四:Meta Annotation(元注解)
  8. spring boot 集成 log4j 解决与logback冲突问题
  9. 【C#学习之旅】一、数据类型
  10. leetcode [78] Subsets
  11. Go Elasticsearch 删除快速入门
  12. 2021年朔州市副高考试成绩查询,2021朔州市第二中学校教师成绩查询入口:http://www.shuozhou.gov.cn/ztjs/rlzy/rsks/...
  13. 前端工程化/构建自动化
  14. 拓端tecdat|R语言极值理论EVT:基于GPD模型的火灾损失分布分析
  15. 怎样更改计算机ip,怎样修改电脑IP地址?
  16. win7系统桌面上计算机不见了怎么办,win7桌面上我的电脑图标不见了怎么办
  17. Ubuntu14.04使用拼音输入法
  18. 电线的粗细与电流的大小怎么算?电流的大小与电器的功率有什么关系? 如何根据电流的大小选择铜质电线的粗细...
  19. 靶机渗透练习04-driftingblues4
  20. Linux下分卷压缩与解压

热门文章

  1. Step By Step_Java通过JNI调C程序执行
  2. 肾炎治疗有效方(湿热壅滞三焦,气机不利)
  3. Eclipse无法连接真机 并非ADB被占用 原因 很2 已解决 记录之
  4. Linux下,安装配置Weblogic
  5. 一位从业20年的程序员分享积累的20条编程经验
  6. 三朵云 华为_携手共进,华为云推出“Go Africa”计划
  7. Ubuntu sudo apt-get update 失败
  8. reactjs基础知识:原生事件绑定
  9. 【收藏】解决mac问题:打不开,因为它来自身份不明的开发者
  10. Linux创建文件系统及设置分区卷标