您现在的位置是:首页 >技术杂谈 >关于C#中委托的思考与实例网站首页技术杂谈
关于C#中委托的思考与实例
简介关于C#中委托的思考与实例
委托的定义:委托是持有一个或多个方法的对象。
delegate void MyDel(int value);//声明委托类型
MyDel del;//声明委托变量
委托的实质:委托的实质其实也是类,同样继承System.Object,这也是委托无论在类内还是类外都能被定义的原因。
委托的作用:委托是一种类型安全的函数回调机制,它不仅能够调用实例方法,也能调用静态方法,并且具备执行多个方法的能力。
委托的本质:委托的本质就是将可执行的代码从一个方法传递到另一个方法;从程序的角度上来看,你可以把委托看成是用来执行方法的一个“指针”。
委托存在的意义:一般情况下你不会想要“执行”一个对象,但委托会执行它所“持有”的方法。
1、使用委托可以增强可扩展性。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用 If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
不使用委托的情况
class Program
{
//委托的意义之一:使程序具有更好的可扩展性
//将方法当做参数一样使用,避免了对方法的判断,极大强化的程序的可扩展性
static void Main(string[] args)
{
GreetPeople("jakecheng", Language.English);
GreetPeople("成龙", Language.Chinese);
Console.ReadLine();
}
public enum Language {
English,Chinese
}
public static void GreetPeople(string name,Language lang)
{
switch (lang)
{
case Language.English:
GreetEnglishPeople(name);
break;
case Language.Chinese:
GreetChinesePeople(name);
break;
}
}
public static void GreetChinesePeople(string name)
{
Console.WriteLine("早上好,"+name);
}
public static void GreetEnglishPeople(string name)
{
Console.WriteLine("Morning," + name);
}
}
使用委托的情况
delegate void GreetingDelegate(string name);
class Program
{
static void Main(string[] args)
{
GreetPeople("Jake cheng", new GreetingDelegate(GreetEnglishPeople));//MyDelegate(GreetEnglishPeople)
GreetPeople("成龙", GreetChinesePeople);
Console.ReadLine();
}
public static void GreetPeople(string name, GreetingDelegate MyDelegate)
{
MyDelegate(name);
}
public static void GreetChinesePeople(string name)
{
Console.WriteLine("早上好," + name);
}
public static void GreetEnglishPeople(string name)
{
Console.WriteLine("Morning," + name);
}
}
在使用委托的情况下,代码的冗余明显下降。
委托的使用流程
1、声明一个委托类型。委托声明看上去和方法声明相似,只是没有实现块
2、使用该委托类型声明一个委托变量
3、创建一个委托类型的对象,并把它赋值给委托变量。新的委托对象包含指向某个方法的一用,这个方法的签名和返回类型必须跟第一步中定义的委托类型一致。
4、你可以选择为委托对象添加其他方法
5、在代码中你可以像调用方法一样调用委托
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。