C#基础知识整顿 基础知识(20) 托付(一)【C#.Net教程】,C#,基础知识整理,委托
作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:35评论:0
托付的运用
事宜是一种机制,事宜是经由过程托付完成的,所以看邃晓了托付,关于事宜也就能够更好的理解了。先看下面一个小例子。
这是形貌差别言语的顺序员的代码:
比方运用C#的顺序员我们如许形貌,个中programerName参数示意这个顺序员的姓名。
public void CsharpProgramer(string programerName) { Console.WriteLine(string.Format("{0} 运用C#编程!", programerName)); }
运用Java的,
public void JavaProgramer(string programerName) { Console.WriteLine(string.Format("{0} 运用Java言语编程!")); }
那末这么多言语,怎样辨别这是哪一个顺序员呢?运用一个罗列来示意,
public enum ProgramLanguage { CSharp, C, Java }
那末举行一个完全的形貌,代码以下:
public class ProgramerDescription { //01 public void CsharpProgramer(string programerName) { Console.WriteLine(string.Format("{0} 运用C#编程!", programerName)); } public void CProgramer(string programerName) { Console.WriteLine(string.Format("{0}运用C言语编程!", programerName)); } public void JavaProgramer(string programerName) { Console.WriteLine(string.Format("{0} 运用Java言语编程!")); } //02 public void Description(string programerName, ProgramLanguage type) { switch (type) { case ProgramLanguage.CSharp: CsharpProgramer(programerName); break; case ProgramLanguage.C: CProgramer(programerName); break; case ProgramLanguage.Java: JavaProgramer(programerName); break; default: Console.WriteLine("A kind of new Language that you never heard of."); break; } } } public enum ProgramLanguage { CSharp, C, Java }
挪用:
ProgramerDescription pm = new ProgramerDescription(); pm.Description("杨友山", ProgramLanguage.CSharp);
这时候,输出"杨友山 运用C#编程!";
如许就开端完成了一个对顺序员形貌的简朴完成。这里的Description要领是经由过程一个罗列范例来区分差别的言语。如许它的保护性是比较差的,由于另有许多编程言语(C++,php,等),假如想加一种言语就要增添一个对应的要领,然后就要修正ProgramLanguage这个罗列范例。增添要领对原顺序影响不大,由于能够用分部类来完成,而修正罗列就不适宜了,这也不符合面向对象设想头脑的开放关闭准绳。
那末在Description要领中怎样处置惩罚呢,也就是不必罗列了,Description要领如何来辨别该挪用哪一个要领(CsharpProgramer,CProgramer,JavaProgramer)对顺序员举行形貌。
public void Description(string programerName, 某范例 某参数)
{
//挪用对应的要领
}
这里的某范例就是要用它来区分哪一个要领的范例,换句话说,最好就是在这里我直接把我想要挪用的要领当作参数传进去。比方我要挪用CProgramer要领来形貌C顺序员,
ProgramerDescription pm = new ProgramerDescription();
pm.Description("D.M.Ritchie", CProgramer);
根据这个主意,public string Description(string programerName, 某范例 某参数)的“某范例 某参数”该怎样示意呢?
固然我们就想到C#中的托付delegate了。托付是一种数据结构,它援用静态要领或援用类实例及该类的实例要领。 用托付来完成上述的代码:
public class ProgramDescriptionDelegate { //托付,示意要领 public delegate void DescriptionDelegate(string programerName); //01 public void CsharpProgramer(string programerName) { Console.WriteLine(string.Format("{0} 运用C#编程!", programerName)); } public void CProgramer(string programerName) { Console.WriteLine(string.Format("{0}运用C言语编程!", programerName)); } public void JavaProgramer(string programerName) { Console.WriteLine(string.Format("{0} 运用Java言语编程!")); } //02 public void Description(string programerName, DescriptionDelegate description) { description(programerName); } }
挪用:
ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); pm.Description("杨友山", pm.CsharpProgramer);
效果是和最最先的代码是一样的。
什么是托付?MSDN如许诠释的:托付是一种定义要领署名的范例,能够与具有兼容署名的任何要领关联,能够经由过程托付挪用要领。托付用于将要领作为参数通报给其他要领。时候处置惩罚顺序就是经由过程托付挪用的要领。
仔细看运用托付的代码,
public void Description(string programerName, DescriptionDelegate description)。挪用时,
DescriptionDelegate description传入的是 pm.CsharpProgramer,也就是此时description=pm.CsharpProgramer。实在我们还能够如许挪用:
//要领和托付绑定 ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); YYS.CSharpStudy.Window.SDelegate.ProgramDescriptionDelegate.DescriptionDelegate csharpDelegate = pm.CsharpProgramer; YYS.CSharpStudy.Window.SDelegate.ProgramDescriptionDelegate.DescriptionDelegate cdelegate = pm.CProgramer; pm.Description("杨友山", csharpDelegate); pm.Description("D.M.Ritchie", cdelegate);
效果:
再做修正:
ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); YYS.CSharpStudy.Window.SDelegate.ProgramDescriptionDelegate.DescriptionDelegate pdelegate = null; pdelegate += pm.CsharpProgramer; pdelegate += pm.CProgramer; pm.Description("杨友山", pdelegate);
效果:
这里先执行了pm.CsharpProgramer,然后又执行了pm.CProgramer要领。
能够看出托付不光能够将要领作为参数,而且还能够将要领绑定,而起还能够绑定多个。
运用+=绑定要领,作废则运用-=举行作废,上面的挪用能够修正以下:
ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); YYS.CSharpStudy.Window.SDelegate.ProgramDescriptionDelegate.DescriptionDelegate pdelegate = null; pdelegate += pm.CsharpProgramer; pdelegate += pm.CProgramer; pdelegate -= pm.CProgramer; pm.Description("杨友山", pdelegate);
如许就只挪用pm.CsharpProgramer;一个要领了。
以上就是C#基础知识整顿 基础知识(20) 托付(一)的内容,更多相关内容请关注ki4网(www.ki4.cn)!
相关推荐
- C#对XML读写的代码实例【XML教程】,C#,XML读写
- C#中经由过程xpath查找xml的指定元素的代码实例【XML教程】,C#,xpath,xml
- C#怎样盘算2个字符串类似度的示例代码分享【C#.Net教程】,C#,字符串,相似度
- 详解C#罕见运用函数的实例总结【C#.Net教程】,C#,应用函数
- C#剖析XML文件的代码实例分享【C#.Net教程】,C#,XML
- C# 怎样设置体系的默许打印机的简朴代码示例【C#.Net教程】,C#,打印机
- 详解C#程序员开辟WinForm必需晓得的Window音讯大全的示例代码【C#.Net教程】,C#,WinForm,Window
- C# HttpHandler 异步监听要求的代码详解【C#.Net教程】,C# ,HttpHandler ,异步监听
- C# Json 序列化与反序列化二【C#.Net教程】,C#,序列化,反序列化
- C# DataSet机能最好实践【C#.Net教程】,C#,DataSet
你 发表评论:
欢迎- .Net教程排行
-
- 1案例分享c++ map的运用和 查找机能测试【C#.Net教程】,性能,map,c++
- 2细致引见C# string花样的日期时候字符串转为DateTime范例的要领【C#.Net教程】,C#,string,DateTime
- 3c#怎样运用?c#的基础语法【C#.Net教程】,c#,关键字
- 4详解ASP.NET中衔接数据库设置要领【C#.Net教程】,ASP.NET,数据库,配置
- 5C# DataSet机能最好实践【C#.Net教程】,C#,DataSet
- 6.net和c#有什么区别【C#.Net教程】,.net,c#
- 7C#_挪用封装的一个类完成导出Excel表格的功用【C#.Net教程】,C# Excel表格
- 8asp .net 面试题及答案分享【C#.Net教程】,.net,自己,整理,问题,面试
- 9让WebAPI 返回JSON花样的数据实例教程【C#.Net教程】,javascript,WebAPI,JSON,api,web,搭建,返回
- 最新文章
- 广而告之