简单讲解c#委托delegate的用途

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

public void GreetPeople(string name) {
    EnglishGreeting(name);
}
public void EnglishGreeting(string name) {
    Console.WriteLine("Morning, " + name);
}
当有中国人时:
public void ChineseGreeting(string name){
    Console.WriteLine("早上好, " + name);
}
这时需要修改GreetPeople,添加一个枚举,也可用if else
public enum Language{
    English, Chinese
}


public void GreetPeople(string name, Language lang){
    //做某些额外的事情,比如初始化之类,此处略
    swith(lang){
        case Language.English:
           EnglishGreeting(name);
           break;
       case Language.Chinese:
           ChineseGreeting(name);
           break;
    }
}

但如果有更多国家人时,需要再次修改GreetPeople,这样就不能很好的扩展,如果能吧 EnglishGreeting等作为参数传递,就好了

于是就有了委托delegate

public delegate void GreetingDelegate(string name);

public void GreetPeople(string name, GreetingDelegate MakeGreeting) {
               MakeGreeting(name);
            }

//这样在使用时,把方法作为参数传递

static void Main(string[] args) {
               GreetPeople("Jimmy Zhang", EnglishGreeting);
               GreetPeople("张子阳", ChineseGreeting);
               Console.ReadKey();
           }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值