委托的使用方法:
1、声明委托类
2、创建委托对象
3、叠加或剔除委托方法
4、执行委托(方法s)
委托(代理)和类一样,是数据类型,等同于C++的函数指针。可以看做是个特殊的类。
格式:delegate 返回值 委托名(参数)
委托包含并可执行具有相同签名和返回值类型的有序方法列表。
当委托被调用时,它调用列表中的每一个方法。
代码:
//第一步声明委托;格式:delegate 返回值 委托名(参数);
class Test
{
public void Print1()
{
Console.WriteLine( "Print1 -- instance" );
}
public static void Print2()
{
Console.WriteLine( "Print2 -- static" ); }
}
public class Test1
{
public void Print11()
{
Console.WriteLine("Print11 -- instance");
}
public static void Print12()
{
Console.WriteLine("Print12 -- static");
}
}
delegate void PrintFunction();//返回值为空
class Program
{
static void Main()
{
//签名相同 ,签名是指函数
//方法的参数个数和类型
Test t = new Test();
Test1 t1 = new Test1();
// PrintFunction pf ;
PrintFunction pf = t.Print1;
pf += Test.Print2;//第四步:追加方法到列表
pf += t1.Print11;//第四步:追加方法到列表
pf += Test1.Print12;//第四步:追加方法到列表
pf += Test1.Print12;
// 判断被调用的方法列表是否为空. pf = t.Print1; pf -= t.Print1;
if (null != pf)
pf(); // 第五步:调用委托.
else
Console.WriteLine("Delegate is empty");
Console.ReadLine();
}
}
控制台输出结果:
委托包含并可执行具有相同签名和返回值类型的有序方法列表。
当委托被调用时,它调用列表中的每一个方法。
1、委托加载你指定的n个同样签名的方法,不一定是所有;
2、委托本身是没有委托体“{}”就是方法体,
所以他没有类似类的自定义数据成员(字段、方法等等)
3、委托创建的时候必须初始化,否则就会报错。