C# 委托

xiaoxiao2021-02-27  299

直接上实例。代码含有注释。

//类型A,内有一个函数

  class A     {         public void Close_A()         {             Console.WriteLine("Close_A");         }     }

//类型B,里面有一个函数。

 class B     {         public void Close_B()         {             Console.WriteLine("Close_B");         }     }

//类型C,里面有一个静态方法

    class C     {         static public void Static_Close_C()         {             Console.WriteLine("Static_Close_C");         }     }

class Controller     {         //委托关键字  定义委托类型。 可以加参数列表         delegate void stop_Con();             //用委托类型定义委托变量         private stop_Con stop_con1;         //构造函数中,对委托加入方法。         public Controller()         {             //加入委托前,必须保证方法实例化,静态函数除外             a1 = new A();             b1 = new B();             //委托指向的方法,参数列表和返回值,需要和委托定义的保持一致             //委托返回类型是void,参数是空。(Close_A的返回值也必须是Void,参数也必须是空,否则报错)             //多播委托,返回值基本上都是VOID,             this.stop_con1 += a1.Close_A;             //this.stop_con1 += new stop_Con(a1.Close_A);  //意思同上             this.stop_con1 += b1.Close_B;             //静态方法,直接用类名             this.stop_con1 += C.Static_Close_C;         }         private A a1;//定义类A的引用a1         private B b1;//B类引用b1         public void Close()         {             //调用定义的委托变量,实际就是调用,a1.Close_A() 和 b1.Close_B和C.Static_Close_C():;             this.stop_con1();         }     }

  static void Main(string[] args)         {             Controller con = new Controller();             con.Close();         }

还可以通过属性的方法调用委托。或者通过函数参数给传递委托。

 class Controller     {         //委托关键字  定义委托类型。 可以加参数列表         public delegate void stop_Con();             //用委托类型定义委托变量         private stop_Con stop_con1;         //通过函数调用委托,委托之间可以进行加减运算         public void Add(stop_Con s)         {             stop_con1+=s;         }

public void Remove(stop_Con s)         {             stop_con1 -= s;         }         //通过属性的方法调用委托,此时委托类型的定义,需要声明为public         public stop_Con Stop_con1         {             get { return stop_con1; }             set { this.stop_con1 = value; }         }         private A a1;//定义类A的引用a1         private B b1;//B类引用b1      }

static void Main(string[] args)         {             A a1=new A();             Controller con = new Controller();             con.Stop_con1 += a1.Close_A;             B b1 = new B();             con.Add(b1.Close_B);             con.Stop_con1();         }

转载请注明原文地址: https://www.6miu.com/read-3850.html

最新回复(0)