using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Examples
{
//委托(代理)和类一样,是数据类型,等同于c++的函数指针。可以看做是个特殊的类。格式:delegate 返回值 委托名(参数)
//委托包含并可执行具有相同签名和返回值类型的有序方法列表。
//当委托被调用时,它调用列表中的每一个方法。
//刑事律师代理 viod 刑事官司(法院,公安,检察院,被告,原告)
//民事律师代理 viod 民事官司(法院,,被告,原告)
//第一步声明委托;格式: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;
if (null != pf) // 判断被调用的方法列表是否为空. pf = t.Print1; pf -= t.Print1;
pf(); // 第五步:调用委托.
else
Console.WriteLine("Delegate is empty");
Console.ReadLine();
}
}
}