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); //调用委托一定得使用这种方式; } }
相关阅读
使用方面 在一般数据以数据分类格式显示时,调用DataGridView会更加清晰方便。除此以外在一般与数据库的连接中也会使用DataGrid
C#中的StreamReader和StreamWriter的基本使用
1:简述 StreamReader :这个是操作字符的,以字符为单位 2:基本使用方法 1 using(StreamReader reader = new StreamRea
int[] num = { 1,2,3,4,5,6,7}; int [] num1=new int[10]; num1[2] = 9; int[]
C#多线程编程实战(一):线程基础1.1 简介多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力
奇迹暖暖联盟委托12-1星盘的指引高分搭配攻略分享,今天奇迹暖暖联盟委托12章更新了,不少玩家还不知道如何搭配通关,下面就来看下联盟