在c#里面,有的时候一些代码的实现必须用到委托,比如:线程里面修改某个textBox的值,如果直接在线程里面写修改的代码,执行时候,编译器会报错,因为c#不允许这样写。还有在单独写的类里面,修改某个form里面某个控件的属性值等等,也是不被允许的。这时候,就需要使用到委托(delegate)。委托其实是这样的,为某些实现写一个函数,并将其赋值给委托(相当于函数指针),在使用 的时候直接通过委托名来调用。

声明和定义委托分为4个步骤:

1.声明一个委托(函数指针)

2. 创建委托对象

3. 创造符合委托格式的函数。(指针指向的函数)
4. 将函数名称赋值给委托。
下面是一个简单的例子:
我使用vs2013新建了一个windows窗体应用程序,默认新建的窗口名字为Form1,双击窗口进入form1的代码编写页面,如图:
接下来进行第1步+第2步:委托的声明和委托对象的定义(要写在与form1的默认构造函数并列的位置)

然后在form1里面拖入两个控件,一个是button1,一个是label1,现在自己写一个函数reFresh(),用来修改label1的text,这就是
第3步创造符合委托格式的函数。然后在form1_load里面进行第4步将函数名称赋值给委托。如图:
接下来的步骤是我自己写的一个调用,我自己写了一个类dele(不知道怎么自定义写类的自行百度),内容如下:
现在开始写button1的函数,让我们可以运行出执行完的效果;函数内容如下:
然后就可以开心的运行了;以下是运行截图,点击button1一次,就会实现label1数据的一次自增;
下面是我对代码的粘贴,试验的时候可以自行拷贝;
Form1.cs:
namespace Delegate
{public partial class Form1 : Form{public delegate void RefreshLable();  //委托的声明,我取的名字是RefreshLable,返回值类型自主定义;public RefreshLable refL1;   //创建委托对象;public Form1(){InitializeComponent();}int i = 0;     //声明一个int值,用来作为文本框的值;public void reFresh()   //创造符合委托格式的函数。(i自增,在文本框里显示);{i++;label1.Text = i.ToString();}private void Form1_Load(object sender, EventArgs e){refL1 = reFresh;  //将函数名称赋值给委托;dele.frm = this;  //这句是一定要写的,用来告诉编译器dele类里的对象frm指的是这个from1;}private void button1_Click(object sender, EventArgs e){dele de = new dele();   //实例化一个dele类的对象;de.useDelegate();     //调用类的函数,实现委托的使用;}}
}
dele.cs
public class dele{public static Form1 frm;    //定义一个from类的对象;public void useDelegate()  //写这个函数,来调用委托;{frm.Invoke(frm.refL1);    //调用委托一定得使用这种方式;}}

c#里面委托(delegate)的讲解相关推荐

  1. 大白话系列之C#委托与事件讲解大结局

    今天是大白话系列之C#委托与事件讲解的大结局,也是我们最关心的,在日常的MES系统编程中到底怎样使用这样的利器,其实我们每天都在使用事件,一个窗体,一个按钮都包含这事件,只是很少用到自己写的委托和事件 ...

  2. C# 委托(Delegate) 事件(Event)应用详解

    委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每 ...

  3. C#委托(delegate、Action、Func、predicate)和事件

    C#委托(delegate.Action.Func.predicate)和事件 - 园子的蜗牛 - 博客园 C#之委托 - 摸鱼王 - 博客园 C++函数指针与C#委托之间有何联系 - 51CTO.C ...

  4. C#-----委托delegate的定义与使用

    委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法 委托的声明: delegate <函数返回类型> <委托名> (<函数参数>) //声明委托 del ...

  5. C#基础知识学习之 ✨ “精神小伙“——委托(delegate) 的含义和用法

    C#委托(Delegate) 在C#的学习过程中,自然有我们的精神小伙--委托 的一席之地 本文就介绍一下C#中的委托,这位可以包含同类方法函数的小伙子 C# 中的委托(Delegate)类似于 C ...

  6. [C#]委托和事件(讲解的非常不错)

    引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...

  7. 大白话系列之C#委托与事件讲解(一)

    从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的.首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个 ...

  8. unity学习-委托(delegate),事件(event),Action,Func

    unity学习 委托 含义 定义 使用 事件 含义 使用 在进行项目的过程中,一直存在着对代码管理不当的问题,所以需要学习一些科学的代码思维,减少后期功能的修改与迭代引发的代码冗杂和内存爆炸 可以看b ...

  9. 理解委托(delegate)及为什么要使用委托

    委托:是一种定义方法签名的类型. 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联. 您可以通过委托实例调用方法. 上述为官方说法,理解起来比较难,举个生活中的例子: 某人有三子,让他们各 ...

  10. 异步使用委托delegate --- BeginInvoke和EndInvoke方法

    当我们定义一个委托的时候,一般语言运行时会自动帮委托定义BeginInvoke 和 EndInvoke两个方法,这两个方法的作用是可以异步调用委托. 方法BeginInvoke有两个参数: Async ...

最新文章

  1. 漫话:如何给女朋友解释什么是Git和GitHub?
  2. linux 进程 setuid,linux特殊权限位之setuid、setgid和sticky
  3. icd植入是大手术吗_白内障手术为何要植入人工晶体?便宜的人工晶体会影响视力吗?...
  4. mysql创建函数失败_mysql创建函数出现问题?
  5. LeetCode 249. 移位字符串分组(哈希)
  6. Exchange Server 2013多域名证书申请
  7. 谷歌安全研究员发现3个 Apache Web 服务器软件缺陷
  8. 人工智能发展中面临的问题有哪些?
  9. android 自定义多边形,android自定义形状的按键实例代码
  10. 如果到来,会是怎样情况,fuck,
  11. 语法糖(Syntactic sugar)
  12. 759页14万字智慧大楼弱电智能化规划设计方案
  13. 物联网安全期末知识点总结
  14. Linux通过终端打开应用程序(自用)
  15. 最终幻想-核心危机中魔石融合附全能力详细教学
  16. 亲爱的,你是吃屎了么
  17. python游戏制作rpg_用 Python 语言来写游戏
  18. 基于微信小程序的音乐播放器系统+后台管理系统(SSM+mysql)-JAVA.VUE【毕业设计、论文、源码、开题报告】
  19. Qt之线程的开始暂停恢复停止
  20. USB-RS232转换器芯片的特点与优势

热门文章

  1. qml学习--Rectangle案例学习
  2. python web框架 多线程和多进程_python 多线程和多进程
  3. word单独设置页眉页脚(页码)
  4. 不谋全局者,不足以谋一隅,不谋大势者,不足以谋一时
  5. Android测试:从零开始3—— Instrumented单元测试1
  6. MPB:上海交大肖湘组-​海洋微生物的厌氧高压培养实验
  7. javatype与oftype的区别
  8. 【bzoj4143】[AMPPZ2014]The Lawyer
  9. 因为应用程序的并行配置不正确
  10. nginx反向代理及负载均衡使用详解