跨类调用委托

委托本质上就是利用方法的指针进行回调,当有两个类A、 B,我们在A类中调用B类。又发现B类需要使用A类的方法。也就是当执行流程从A 执行到B后,中途又回到A执行,然后在继续在B中执行。实际的使用例子就是父窗体调用子窗体,然后子窗体又需要调用父窗体的方法。。例如:

 

  

   // (一) 说明委托,用于接受方法指针,该参数应该声明与class之外,这样所有的class都能使用。
    public delegate int weituo(int a, int b);
 
    public class class_A//主执行类(被回调类)
    {
        public weituoweituo1;//(二)声明委托用于回调(回调与被回调类都要声明)     
       
        public int Add(int a, int b)//(三)委托指向的方法 签名必须一致(返回值,和形参)
        {
            return a + b;
        }
        public voidDo_class_B()//调用B类,再从B类执行回调
        {
            class_B cb = new class_B();
           cb.weituo1 = this.weituo1;//(四)将委托传入B类
           cb.classB_add();
        }
        public class_A()
        {
            weituo1= new weituo(this.Add);//(四)通过构造方法将回调方法注入委托
        }
}
-------------------------------------------------------------------------------------
    public class class_B//回调类
    {
        public weituoweituo1;//(二)声明委托用于回调(回调与被回调类都要声明)    
        public voidclassB_add()
        {
           Console.WriteLine( weituo1(3, 6));//执行回调
        }
}
-------------------------------------------------------------------------------------
    class Program
    {
        static void Main(string[] args)
        {
            class_A class_A = newclass_A();
           class_A.Do_class_B();
        }
    }
 


1 首先在声明一个公共的delegate委托类型,使它能指向某类方法。

 

2 在回调、被回调类中都声明该委托。

 

3 在被回调类中用构造函数将回调方法注入委托。

 

4 实例化回调类后,将委托传递给回调类

 

5 在回调类中使用委托执行回调方法

 

我们可以发现委托也是通过实例化来的,例如:

call1 = newcall(math.Add);,

构造方法里的参数是被委托对象的方法。这时,委托就是这个方法的引用变量。我们可以利用这个引用将方法当作一个变量来传参。

publicvoid ppu(call d, int a, int b)//利用委托将方法(指针)当作参数传入。

            { Console.WriteLine(d(a,b));

            }

 

在实际使用中,委托也可以实现接口的先调用后实现的功能。即先在一个类中调用委托,然后使用的时候在根据需要说明委托引用的方法。从而实现功能插入

 

特别强调,说明委托时,参数必须一致,输入参数和返回值都要检查。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值