委托

委托是什么:

安全的函数指针,

通过自定方法调用方法,实现功能

用delegate来声明委托方法:

//委托的实现  
    public delegate int SumAdd(int a, int b);//声明一个方法
    class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program();//通过这个方法,找到当前类下的方法执行
            SumAdd sumadd = new SumAdd(p.AddSum);//sumadd相当于指针指向p.Addsum的地址
            int sum = sumadd(3, 3);
            Console.WriteLine(sum);
            Console.ReadKey();
        }
        public int AddSum(int a, int b)
        {
            return a + b;
        }
    }

委托创建:

准备一个方法:
  public int AddSum(int a, int b)
        {
            return a + b;
        }

声明委托:delegate声明委托

创建委托对象: SumAdd sumadd = new SumAdd(p.AddSum)

追加方法:sumadd +=AddSum

删除方法:sumadd -=AddSum

调用: int sum = sumadd(3, 3);

但是因为这个声明后,需要实例化调用,而且多数委托声明的情况无非两种:一种有返回值,一种没有返回值。微软就把委托的声明封装成了两个固定的声明办法,不需要调用委托的时候再实例化:

Active<>

func<>

再来列举一个简单的实例

Active<>

是一个封装好的委托方法,只有一个参数,没有返回值。使用委托方法的时候不用再实例化,直接使用方法。

实现内容:建立4个窗体1个Parent;3个Son;,Parent发送一条消息,Son窗体上获得这个消息,也可以让其中一个不获得。

 public partial class frmParent : Form
    {

        //定义委托aftermesg,而且只有一个参数string类型,没有返回值;
        public Action<string> aftermesg { get; set; }
        public frmParent()
        {
            InitializeComponent();
        }

        private void frmParent_Load(object sender, EventArgs e)
        {
            //实例化三个窗体son
            frmSon son = new frmSon();
            frmSon2 son2 = new frmSon2();
            frmSon3 son3 = new frmSon3();
            //使用委托方法,追加多个son窗体接收委托方法传递的值
            aftermesg += son.sendtxt;
            aftermesg += son2.showtxt;
            aftermesg += son3.showtxt;
            //aftermesg -= son2.showtxt;//可以删除son2窗体使用委托方法
            //显示子窗体
            son.Show();
            son2.Show();
            son3.Show();
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //委托方式;
            if (aftermesg == null)
            {
                return;
            }
            //把委托的信息传递给text
            aftermesg(this.txtp.Text);
        }

效果图,如下:

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢美玲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值