什么是委托

什么是委托

1.委托的概念

在C#中委托的概念其实和咱们生活中的代理是一个概念。但是在编程的世界还中存在一种叫代理模式的概念,所以有所区分。

2.委托为了解决什么事情

在做一些操作时时,如果用户不输入一些必填项,我们可能会停下来弹窗提示用户强制用户输入,如果他填写了所有必填的东西,我们再让他继续走正常流程,但是如果这个强制输入的部分再许多地方都有使用,那我们怎么办呢?

  1. 将判断强制输入的逻辑提取到公用的一个方法,在正常调用时,先调用此方法,如果正常了就继续执行正常流程。
  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;
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值