什么是委托
1.委托的概念
在C#中委托的概念其实和咱们生活中的代理是一个概念。但是在编程的世界还中存在一种叫
代理模式
的概念,所以有所区分。
2.委托为了解决什么事情
在做一些操作时时,如果用户不输入一些必填项,我们可能会停下来弹窗提示用户强制用户输入,如果他填写了所有必填的东西,我们再让他继续走正常流程,但是如果这个强制输入的部分再许多地方都有使用,那我们怎么办呢?
- 将判断强制输入的逻辑提取到公用的一个方法,在正常调用时,先调用此方法,如果正常了就继续执行正常流程。
- 使用委托,将我们后面要执行的逻辑嵌入强制判断逻辑后。
main(){
//第一种方式,先检查数据
Method1();
//委托方式
Method2();
}
//调用常用方法
void Method1(){
var user=CheckData();
if(user==null){
Console.WriteLine("请输入必填参数");
}
//再执行添加或更新操作
}
//调用委托方法
void Method2(){
CheckData_V2(AddUser);
CheckData_V2(UpdateUser);
//也可以修改成
CheckData_V2(user=>{
//你所想的操作
});
}
//常用版本
public User CheckData(){
var u=new User();
if(string.isnull(u.Name)){
return null;
}
return u;
}
//声明委托类型
public delegate void Exec(User u);
//委托版本
public void CheckData_V2(Exec d){
var u=new User();
if(string.isnull(u.Name)){
return ;
}
d(u);
}
public void AddUser(User u){
//执行保存操作
}
public void UpdateUser(User u){
//执行修改操作
}
2.委托的实现
在C#中委托是一种类型,写法与抽象方法和静态方法的写法类似,都是通过关键字来确定的。
抽象方法通过abstract
来修饰;
静态方法通过static
来修饰;
委托通过delegate
来修饰;
虽然委托是一种类型,但是我们可以当然我们可以把委托声明在某个类中,此种叫局部委托。也可以将委托在类外,此种叫全局委托。
// 这就是一个委托 无返回值 无参数
Public delegate void delegateshow();
//对上方的委托进行一些处理后,我们就能得到一个委托的模板
/**
[访问级别] delegate [返回值] {委托的名称}([委托的参数列表])
**/
3.使用委托
3.1.声明委托
//我们创建了一个名为:DelegateDome的委托,返回值与参数都为空
public delegte void DelegateDome();
3.2.使用委托
因为我们前面说到了委托是一种类型,所以在使用委托时,和平常创建变量什么不同,只是委托只能够接收方法作为其值。
委托的实例,可以想象成指鹿为马。因为鹿是4条腿、一个脑袋,一条尾巴,马也是一样,所以赵高就觉得鹿就是马!这个故事就告诉了委托的实例,应该和委托一样,相同的返回值、相同的参数列表,且参数列表的排列顺序也要一致。
public delegte void DelegateDome();
public delegte int DelegateDome_V2(int x,int y);
public class program{
public static main(){
//声明委托
//Show方法与DelegateDome具有相同的返回值与相关的参数列表
DelegateDome d1=Show;
//Puls方法与DelegateDome_v2委托具有相同的返回值与相同的参数列表,且参数列表的排列顺序也要一致
DelegateDome_v2 d2=Puls;
//调用委托
d1();
var pulsvalue=d2(1,2);
Console.WriteLine(pulsvalue);
/** 输出:
此方法被委托调用了
3
**/
}
public static void Show(){
Console.WriteLine("此方法被委托调用了")
}
public static int Puls(int number,int number2){
return number+number2;
}
}