跨类调用委托

来源:互联网 发布:gigi hadid 知乎 编辑:程序博客网 时间:2024/06/04 20:12

委托本质上就是利用方法的指针进行回调,当有两个类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));

            }

 

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

 

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

原创粉丝点击