必威体育Betway必威体育官网
当前位置:首页 > IT技术

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

时间:2019-08-29 04:10:00来源:IT技术作者:seo实验室小编阅读:74次「手机版」
 

c#委托

在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#控件DataGridView控件使用详解

使用方面 在一般数据以数据分类格式显示时,调用DataGridView会更加清晰方便。除此以外在一般与数据库的连接中也会使用DataGrid

C#中的StreamReader和StreamWriter的基本使用

1:简述       StreamReader :这个是操作字符的,以字符为单位 2:基本使用方法 1 using(StreamReader  reader = new   StreamRea

C#新建数组

int[] num = { 1,2,3,4,5,6,7}; int [] num1=new int[10]; num1[2] = 9; int[]

C# 多线程编程实战(一)--线程基础

C#多线程编程实战(一):线程基础1.1 简介多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力

奇迹暖暖联盟委托12-1 星盘的指引高分搭配攻略

奇迹暖暖联盟委托12-1星盘的指引高分搭配攻略分享,今天奇迹暖暖联盟委托12章更新了,不少玩家还不知道如何搭配通关,下面就来看下联盟

分享到:

栏目导航

推荐阅读

热门阅读