委托
来源:互联网 发布:淘宝十大黑科技 编辑:程序博客网 时间:2024/05/22 17:51
前段时间学习了EF映射,而对EF映射的学习又不得不提到lambda表达式,而这篇博客主要讲的既不是lambda表达式,也不是EF映射,而是我们都知道而又不常常使用的委托。
委托的定义
委托的出现使得方法能够像参数一样进行传递,我认为委托就是方法的一个载体。从数据结构方面来思考,它可以被认为是一种数据类型。从某种意义上说委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托的方法列表将依次被执行。
委托的创建和声明
委托使用关键字delegate来创建。修饰符 + delegate+ 返回值 +委托变量名+(参数)
public delegate string frmshow(); //创建委托 public static frmshow onshow=new frmshow(this.showText); //委托的声明以及赋值 private string showText() { return this.Text; }
委托的运算
form1show = this.showText;form1show += this.showName; //+运算符,把方法加载到委托列表中,同样也可以有-运算符,把方法从委托的方法列表中去掉
委托实例
窗体1的name和text是私有的,假设我们在窗体2不能直接获得窗体1的name和text,那么我们可以在窗体1上提供一个委托,使窗体2通过委托来获得name和text。也就是说:类2可以通过委托来获得类1中不能直接获得的某些数据。
public partial class Form1 : Form { public Form1() { InitializeComponent(); form1show = new frmshow[] { this.showText, this.showName }; } public delegate string frmshow(); public static frmshow[] form1show; private void button1_Click(object sender, EventArgs e) { MessageBox.Show(showText ()); } private string showText() { return this.Text; } private string showName() { return this.Name; } private void button2_Click(object sender, EventArgs e) { Form2 frm = new Form2(); frm.Show(); } }
public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //Delegate[] del = Form1.form1show.GetInvocationList(); //Form1.frmshow[] delegates = new Form1.frmshow(); //申明一个变量i作为计数器 Form1.frmshow[] umath = Form1.form1show; int i = 0; foreach (Form1.frmshow d in Form1.form1show) //循环遍历,调用委托列表的 方法。 { MessageBox.Show(d()); } } }
以上总结如有错误,还请指出。多谢来访。
0 0
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- android客户端从服务器端获取json数据并解析的实现代码
- 图解SqlServer更改sa密码
- Android UI Libs之android-gif-drawable
- PHP程序员玩docker有感
- POJ 2286 The Rotation Game
- 委托
- java获取某月的第一天和最后一天
- 函数对象(3)
- Spark Streaming 实现思路与模块概述
- JS (Coursera课程)
- 以一个方法为例谈Java的多态
- java变量&常量
- ListView、CursorAdatper
- AIDL跨进程回调(Server回调Client)