zoukankan      html  css  js  c++  java
  • C# 中的委托和事件

    C# 中的委托和事件

    http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx

        /// <summary>
        /// 不好的设计
        /// 后期增加语种需要增加改动3个地方:语种枚举、switch-case、方法
        /// </summary>
        public class BadDesign
        {
            public enum Language
            {
                English, 
                Chinese
                //add other language
            }
    
            public void GreetPeople(string name, Language lang)
            {
                switch (lang)
                {
                    case Language.English:
                        EnglishGreeting(name);
                        break;
                    case Language.Chinese:
                        ChineseGreeting(name);
                        break;
                    //add other language
                }
            }
    
            public void EnglishGreeting(string name)
            {
                Console.WriteLine("Good Morning, " + name);
            }
    
            public void ChineseGreeting(string name)
            {
                Console.WriteLine("早上好, " + name);
            }
    
            //add language method
        }
    
    
     /// <summary>
        /// 相对较好的设计
        /// 后期增加语种需要增加改动1个地方:语种方法
        /// </summary>
        class GoodDesign_Delegate
        {
            public void GreetPeople(string name, GreetingDelegate MakeGreeting)
            {
                MakeGreeting(name);
            }
    
            public void EnglishGreeting(string name)
            {
                Console.WriteLine("Good Morning, " + name);
            }
    
            public void ChineseGreeting(string name)
            {
                Console.WriteLine("早上好, " + name);
            }
    
            //add language method
        }
    
    
    public delegate void GreetingDelegate(string name);
    
    
       class Program
        {
            static void Main(string[] args)
            {
                new BadDesign().GreetPeople("nlh", Delegate_Event.BadDesign.Language.Chinese);
                new BadDesign().GreetPeople("nlh", Delegate_Event.BadDesign.Language.English);
    
                new GoodDesign_Delegate().GreetPeople("nlh", new GoodDesign_Delegate().ChineseGreeting);
                new GoodDesign_Delegate().GreetPeople("nlh", new GoodDesign_Delegate().EnglishGreeting);
                Console.Read();
            }
        }
  • 相关阅读:
    02-vue过滤器和键盘修饰符
    01-vue指令
    webpack
    笔记:随机生成数、字符串
    笔记:long、longlong、int、float、NSString相互转换
    关于NSStringFromClass的一点见解
    iOS中UITextField常用设置和方法
    iOS 倒计时的一种实现
    iOS UITextField的代理<UITextFieldDelegate>的几点笔记
    iOS 单例模式简单实例
  • 原文地址:https://www.cnblogs.com/nlh774/p/6143392.html
Copyright © 2011-2022 走看看