首页 > 代码库 > C# 委托和事件
C# 委托和事件
一直对委托和事件有种畏惧感,刚开始入门C#时,很怕去触碰它,现在有些理解了,写下作为一个学习过程中的笔记,防止忘记
委托就是将方法作为一个参数传递。有调用的方法参数决定执行哪一个方法。看例子是最能够快速理解方法的,我们来比较一下两种方法实现同一种功能:根据名字决定使用哪种语言问候语。例如,如果名字name 为Jim,则显示 hello, 如果名字为 张阳,则显示为你好。
首先来看不使用委托的代码情况
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 委托和事件{ class Program { private enum Language { English, Chinese } static void Main(string[] args) { string name1, name2; name1 = "Miya"; name2 = "张"; GreetPeople(name1, Language.English); GreetPeople(name2, Language.Chinese); Console.ReadKey(); } static void GreetPeople(string name, Language lang) { switch (lang) { case Language.English: EnglishGreeting(name); break; case Language.Chinese: ChineseGreeting(name); break; } } static void EnglishGreeting(string name) { Console.WriteLine("Morning," + name); } static void ChineseGreeting(string name) { Console.WriteLine("早上好," + name); } }}
我们会发现,使用该方法也能实现此功能,但是可扩展性很差,未来如果还有使用其他语言的国家,则需要修改GreetPeople方法,以适应新的需求。这时可以考虑使用委托
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 委托和事件{ public delegate void GreetingDelegate(string name); public class Program { static void Main(string[] args) { string name1, name2; name1 = "Miya"; name2 = "张"; GreetPeople(name1, EnglishGreeting); GreetPeople(name2, ChineseGreeting); Console.ReadKey(); } static void EnglishGreeting(string name) { Console.WriteLine("Morning," + name); } static void ChineseGreeting(string name) { Console.WriteLine("早上好," + name); } private static void GreetPeople(string name, GreetingDelegate MakeGreeting) { MakeGreeting(name); } }}
这样使用委托后,将方法作为参数传给GreetPeople 即MakeGreeting 参数,而GreetingDelegate是一种委托类型
委托的使用要先定义一种委托类型 GreetingDeletate
1 定义委托类型 :public delegate void GreetingDelegate(string name);
2 声明委托 GreetingDelegate MakeGreeting
3 调用委托 GreetPeople(name1, EnglishGreeting)
C# 委托和事件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。