委托

来源:互联网 发布:淘宝十大黑科技 编辑:程序博客网 时间: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
原创粉丝点击