delegate int Mydel(ref int X); // 声明 一个有返回值 和引用参数的 delegate
class Test // 创建类
{
public int PrintOne(ref int X) // 引用参数 实例方法1
{
X += 2;
return X;
}
public static int PrintTwo(ref int X) // 引用参数 静态方法2
{
X += 3;
return X;
}
}
class Program
{
static void Main(string[] args)
{
Test t = new Test(); // 实例化类
Mydel mydel; // 创建空 委托
mydel = t.PrintOne; // 给委托赋值
PrintMydel(mydel,1); // 调用委托 打印展示效果
mydel += Test.PrintTwo; // 给委托增加 静态方法
PrintMydel(mydel,2);
mydel += t.PrintOne; // 给委托增加实例方法
PrintMydel(mydel,3);
mydel += Test.PrintTwo; // 参数的新值会在委托里的每一个方法 传递下去
PrintMydel(mydel,4);
Console.WriteLine("======================");
mydel -= t.PrintOne; // 移除方法
PrintMydel(mydel,1);
mydel -= Test.PrintTwo;
PrintMydel(mydel,2);
mydel -= Test.PrintTwo;
PrintMydel(mydel,3);
mydel -= Test.PrintTwo; // 调用委托中不存在的方法 没有任何效果
PrintMydel(mydel,4);
mydel -= t.PrintOne; // 执行完此次方法移除 委托变为空委托
PrintMydel(mydel, 5); /* 调用空委托 抛出异常 */
Console.ReadKey();
}
public static void PrintMydel(Mydel mydel, int num)
{
int X = 5;
//if (mydel != null) // if 判断 处理异常
//{
Console.WriteLine("第{1}次执行:X值:{0}", mydel(ref X), num);
//}
//else
//{
// Console.WriteLine("第{1}次执行:X值:{0}", X, num);
// Console.WriteLine("Delegate is empty");
//}
}
}
委托 方法 调用
最新推荐文章于 2022-09-17 07:53:36 发布