直接上实例。代码含有注释。
//类型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();
}