c#的委托
2021-02-15 00:17
阅读:427
还有一个小时就要回家过年了,祝?大家在2018好运连连,发大财。
c#的委托看上去类似oc的代理和java的接口,但用起来却很不一样,所谓的代理和接口就是独立出来的一些方法声明(没有实现),只要某个类A继承这个代理,就可以实现它们,那么其它的类就可以让A作为它们的属性,让A代替这些类去做事情,只是调用的时候和时机由这些类去做,真正去实现交给A。就好比你抢票,交给第三方软件或者黄牛,第三方软件和黄牛就是A,他们抢票的方法和渠道就是接口和代理,你不需要去关心怎么抢的,你只要交费或者启动开始抢票的按钮。
现在来了解一些c#的委托,不同之处有三点:
先贴代码看看c#的委托如何实现:
using System;
delegate int NumberChanger(int n);//委托的声明
namespace DelegateAppl
{
class TestDelegate
{
static int num = 10;
public static int AddNum(int p)
{
num += p;
return num;
}
public static int MultNum(int q)
{
num *= q;
return num;
}
public static int getNum()
{
return num;
}
static void Main(string[] args)
{
// 创建委托实例
NumberChanger nc1 = new NumberChanger(AddNum);
NumberChanger nc2 = new NumberChanger(MultNum);
// 使用委托对象调用方法
nc1(1);
Console.WriteLine("Value of Num: {0}", getNum());
nc2(1);
Console.WriteLine("Value of Num: {0}", getNum());
NumberChanger nc;
nc = nc1 + nc2;
nc(5);//委托的多播调用(顺序执行)
Console.WriteLine("Value of Num: {0}", getNum());
Console.ReadKey();
}
}
}
打印如下:
Value of Num: 11
Value of Num: 11
Value of Num: 90
第一点不同:c#的委托声明限制了方法的类型(参数要统一)表示一类方法,方法名随意,所以有了多播的功能,说白了就是将多个方法实现拼接在一起顺序执行;而oc的代理不限制方法的类型,但要确定是哪些方法名。第二点不同:c#的委托实例就是一个方法变量,只要类型一致。oc的代理则需要某个类去继承,然后交给这个类去实现。c#的要灵活一些。
第三点不同:离上车的时间不多了,下次补上。新年快乐!
评论
亲,登录后才可以留言!