因位笔记之委托

我们在实际使用中,已经习惯了直接把参数传入方法让方法可以用这个参数,这是行参

委托就是能够把方法作为参数传递

但是有时候需要跨个页面,比如winform中的自定义控件,你知道需要做这么一个事情,但是不知道怎么做,这种情况就需要使用委托了,现在自定义控件中定义一个委托,然后在外面传入,到了合适的执行时机,控件会调用它定义的那个委托,委托的内部是我们从外面传入的方法,这样执行的就是外面的那个方法了,就解决了在我们这一头调用另一头的东西了

委托的写法:    访问修饰符  返回值  delegate  委托名字(参数1,参数2)      双方约定好传入的委托格式,就在传入的一方,定义一个具体的方法,这个方法需要和委托声明的签名一样,然后new  委托1(具体执行方法的名称),然后调用自定义控件暴露出来的接口,把这个委托传入

在自定义控件内接到这个委托后,把这个传入的委托赋值给在前面自定义委托,然后传入参数调用这个委托就可以了

下面用详细代码进行说明:

         先自定义一个用户控件:代码如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace CLibrary
{
    public partial class MyControl: UserControl
    {
        Action<string> func;
        string requestStr = string.Empty;


        public MyControl()
        {
            InitializeComponent();
        }


        public void GetFunc(Action<string> ac,string str)
        {
            func = ac;
            requestStr = str;
            InitializeComponent();
        }
        //显示控件内文本框文字
        private void btn1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(txt1.Text);
        }
        //执行委托
        private void btn2_Click(object sender, EventArgs e)
        {
            if(func!=null)
            func(requestStr);
            else
            {
                MessageBox.Show("还没传递参数呢");
            }
        }
    }
}


这里的GetFunc就是暴露出去用来接收委托的,外面传入的代码:

string str = "我是因位菩萨";


        private void button1_Click(object sender, EventArgs e)
        {
            myControl1.GetFunc(Alert, str);
        }

然后再点击btn2就能调用到委托及传入的参数了,如果直接点是会提示没有传入参数的 ,因为这时候委托并没有传入,点击winform的按钮传入后在点击就可以了

自己学习的过程中总结的,如果对大家也有用就更好啦 么么哒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值