zoukankan      html  css  js  c++  java
  • .Net: C#中的委托(Delegate)和事件(Event)

    专题图:ylbtech-.net 编号: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:什么是委托?事件是委托吗?
    答:委托可以把一个方法当作一个参数带入另一个方法。
           也可以简单地理解为一个指向函数的引用。
           是,一种特殊的委托。
     
    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 />
    &nbsp;<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”下载

    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    VUE和支付
    酱油荷包蛋
    .NET CORE迁移踩坑
    文本超过控件长度自动显示省略号的css
    jquery综合
    123
    Java l ArrayList
    SQL|几种插入语句的区别
    Spark l Spark启启动时的Master参数是什么?
    【外】001-python3之zip函数
  • 原文地址:https://www.cnblogs.com/ylbtech/p/2649334.html
Copyright © 2011-2022 走看看