.Net: C#中的委托(Delegate)和事件(Event)
专题图: 编号:ylbtech DotNet100010010
内容简介 |
1,什么是委托(Delegate)?2,委托的实际应用有哪些?3,两个委托(Delegate)实例解析(3a,不同语言的问候。3b,中文版QQ和Tencent QQ(国际版QQ)用户个人信息的性别呈现。)。 4,使用委托(Delegate)有哪些好处?5,精讲案例下载。
技术与环境 |
操作系统: |
windows |
语言类别: |
C# |
thankyou: | sunshine, 谢谢你的默默付出 |
课题: |
委托(Delegate) |
学习软件: |
Microsoft Visaul Studio 2010 |
||
课程总策划: |
yuanbo |
English name: |
sunshine |
个人主页: |
http://www.cnblogs.com/ylbtech/ |
||
科研团队: |
ylbtech |
教研团队: |
ylbtech |
1,什么是委托(Delegate)和事件(Event)? |
委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真 是太容易了,而没有过去的人每次见到委托和事件就觉得心里憋得慌,浑身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事 件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
P1:什么是委托?事件是委托吗?
答:委托可以把一个方法当作一个参数带入另一个方法。
也可以简单地理解为一个指向函数的引用。
是,一种特殊的委托。
引用:百度百科-C#委托
2,委托的实际应用有哪些? |
我举两个实例。
1,[3a]不同语言的问候。
2,[3b]中文版QQ和Tencent QQ(国际版QQ)用户个人信息的”性别“呈现。
3,两个委托(Delegate)实例解析。 |
ylb_menu:3a,一个不同语言的问候,示例: |
using System; namespace ConsoleApplication1 { class Program { /// <summary> /// ylb:委托的使用 /// </summary> /// <param name="args"></param> static void Main(string[] args) { //调用委托问候方法 GreatPeople("xiaoming", EngGreating); GreatPeople("小明", ChiGreateing); } /// <summary> /// 1, 声明一个问候委托 /// </summary> /// <param name="name"></param> private delegate void GreatingDelegate(string name); /// <summary> /// 2,英式问候 /// </summary> /// <param name="name"></param> private static void EngGreating(string name) { Console.WriteLine("Hallo " + name); } /// <summary> /// 3,中式问候 /// </summary> /// <param name="name"></param> private static void ChiGreateing(string name) { Console.WriteLine("您好," + name); } /// <summary> /// 4,问候转换 /// </summary> /// <param name="name"></param> /// <param name="greatPeople"></param> private static void GreatPeople(string name, GreatingDelegate greatPeople) { greatPeople(name); } } }
ylb_menu:3b,中文版QQ和Tencent QQ(国际版QQ)用户个人信息的”性别“呈现。示例: |
3b_1, /App_Code/SexConvertFun.cs
using System; /// <summary> ///SexConvertFun 的摘要说明 /// </summary> public class SexConvertFun { /// <summary> /// 声明一个性别委托 /// </summary> /// <param name="sex"></param> /// <returns></returns> public delegate string SexDelegate(string sex); /// <summary> /// ylb:1, 中文转换 /// </summary> /// <param name="sex"></param> /// <returns></returns> public static string ChiSex(string sex) { string changeAfterTheSex = string.Empty; switch (sex) { case "M": changeAfterTheSex = "男"; break; case "F": changeAfterTheSex = "女"; break; case "N": changeAfterTheSex = "未知"; break; } return changeAfterTheSex; } /// <summary> /// ylb:2,英文转换 /// </summary> /// <param name="sex"></param> /// <returns></returns> public static string EngSex(string sex) { string changeAfterTheSex = string.Empty; switch (sex) { case "M": changeAfterTheSex = "Male"; break; case "F": changeAfterTheSex = "Female"; break; case "N": changeAfterTheSex = "Unknown"; break; } return changeAfterTheSex; } /// <summary> /// 性别转换 /// </summary> /// <param name="sex"></param> /// <param name="sexConvert"></param> /// <returns></returns> public static string SexConvert(string sex, SexDelegate sexConvert) { return sexConvert(sex); } public SexConvertFun() { // //TODO: 在此处添加构造函数逻辑 // } }
3b_2, /delegateDmo.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="delegateDemo2.aspx.cs" Inherits="delegateDemo" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <h2>委托(Delegate)实际应用</h2> <hr /> 我们以QQ的两个版本解释委托的必要性,1:中文板。2,国际版。<br /> <br /> 以性别为例,若一个若用性别为女,我们在数据库的用户表的sex列存的值为“F” ,则:在中文版性别应该显示女,在国际版性别应该显示Famale。<br /> <hr /> 中文版<br /> 性别:<%=SexConvertFun.SexConvert("F",SexConvertFun.ChiSex) %> <br /> <br /> <br /> <hr /> 国际版<br /> sex:<%=SexConvertFun.SexConvert("F",SexConvertFun.EngSex) %> </div> </form> </body> </html>
4,使用委托(Delegate)有哪些好处? |
我们现在对委托做一个总结:
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
5,精讲案例下载。 |
http://code.google.com/p/ylbtechdotnet/downloads/list
请单击“ylbtech-DotNet-100010010-Delegate”下载
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |