委托

    前段时间学习了EF映射,而对EF映射的学习又不得不提到lambda表达式,而这篇博客主要讲的既不是lambda表达式,也不是EF映射,而是我们都知道而又不常常使用的委托。

    委托的定义

    委托的出现使得方法能够像参数一样进行传递,我认为委托就是方法的一个载体。从数据结构方面来思考,它可以被认为是一种数据类型。从某种意义上说委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托的方法列表将依次被执行

    委托的创建和声明

    委托使用关键字delegate来创建。修饰符 + delegate+ 返回值 +委托变量名+(参数)
   public delegate string  frmshow();  //创建委托
   public static frmshow οnshοw=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
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值