c#里面委托(delegate)的讲解

       在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);    //调用委托一定得使用这种方式;
        }
    }
 

  • 16
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值