委托
- 什么是委托?
- 怎么使用委托?
- 委托的思考?
1. 委托的定义
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
在定义一个函数的时候,我们一般会给它传入参数。
我们设计了一个方法,传入a,b值,返回a,b的和。
public void Add(int a, int b)
{
return a+b;
}
能不能把方法作为参数 传入到另外一个方法里呢?
我们定义了一个方法如下所示,它有三个形参:
- 整型的变量a ;
- 整型的变量b ;
- ***型的参数 Calculate;
函数体内调用方法 Calculate(a,b);
public void Cal (int a ,int b , *** Calculate)
{
Calculate(a,b);
}
- int 是 a的类型
- int 是 b的类型
- *** 是 Caculate的类型
我们把 *** 称为委托。我们 *** 起一个名字
如: CalculateDelegate
它和int 、string 相似 都是 一种类型名。
2. 委托的使用。
2.1. 声明委托
以下我们声明一种上例中的委托
public delegate void CalculateDelegate (int a,int b);
其中:
delegate 为委托关键字 ; void 为返回类型 ;CaculateDelegate为委托名称;int 为参数类型
利用这个语句声明了一个名字是CaculateDelegate的委托类型。
2.2. 委托实例化
CaculateDelegate JiSuan = new CaculateDelegate(Add);
委托类型 委托实例 被委托的函数
当我们使用下边的方法的时候,需要传入实参。JiSuan相当于形参Calculate的实参。
public void Cal (int a ,int b , *** Calculate)
{
Calculate(a,b);
}
我们在主函数中调用
Cal(5,6,jiSuan);
相当于被委托的函数做了以下运算:
Add(5,6);
3. 委托的思考。
我一直思考,为什么命名为 “委托”。
假设,我开了一个中介公司ServiceDelegate,专门给在校大学生提供各种服务(合法服务)。我需要他们的学号和姓名,才能方便我的服务。
A的学号为 :001
B的学号为 :002
我开了一个中介服务公司,开拓了一个业务,给大学生找房子。
public delegate void ServiceDelegate (int numbers,string Name);
学生A可以自己找房子,但是他比较懒惰。
public void AFindWork (int numbers,string Name)
{
Console.WriteLine("I am {0},I find a Work");
}
所以它来到我的中介公司,委托我帮他找房子,并把他的学号姓名给了我。
我把它(找房子)加入我的工作薄
ServiceDelegate list = new ServiceDelegate(AWantAWork);
因为我公司很强大,帮他找到了合适的房子
list(001,"A");
A找到房子后很开心,对我们的服务进行了五星好评,我们也获得一定的佣金。
所以我扩大了业务,新增了一个代替充值水卡的服务
public Delegate void NewServiceDelegate (string place)
突然有一天,A和他的好基友B来我的中介公司寻求帮助,嗯,这次不是租房子。他们都委托我的公司给他们去"地点1"给他们充值水卡。
学生A自己也可以充
public void AReCharge (string place)
{
Console.WriteLine("I had rcharged at "+place );
}
学生B自己也可以充
public void BReCharge (int numbers, string Name)
{
Console.WriteLine("I had rcharged at " +place);
}
但是他们都太懒,近墨者黑嘛,所以他们委托我帮他们充值。
NewServiceDelegate lists = new ServiceDelegate(AReCharge);
lists += new ServiceDelegate(BReCharge);
这个我很有经验的,所以,我很快就完成任务。并获得佣金。嘿嘿,他们肯定不知道我骗了他们。嘘。。。
lists(place)
嗯。。。我们公司可是正规的中介。
预告:
事件件处理机制
- 什么是事件?
- 事件的特点?
- 怎么自定义事件
- 举例说明。