zoukankan      html  css  js  c++  java
  • 基本类型委托(二)

     156 C#对委托的支持

    157对委托链调用进行更多控制

     internal sealed class Light{
            
    public String SwitchPosition() {
                
    return "灯关了";
            }

        }

        
    internal sealed class Fan{
            
    public String Speed(){
             
    throw new InvalidOperationException("风机因过热而报废");
            }

        }

        
    internal sealed class Speaker {
            
    public String Volume() {
                
    return "声音很大";
            }

        }

        
    public sealed class Program
        
    {
            
    //查询以上各个组件状态
            private delegate String GetStatus();
            
    public static void Main()
            
    {
                GetStatus getstatus 
    = null;
                getstatus 
    += new GetStatus(new Light().SwitchPosition);
                getstatus 
    += new GetStatus(new Fan().Speed);
                getstatus 
    += new GetStatus(new Speaker().Volume);
                Console.WriteLine(GetStatusReport(getstatus));
                Console.ReadLine();
            }

            
    private static String GetStatusReport(GetStatus status)
            
    {
                
    if (status == nullreturn null;
                StringBuilder sb 
    = new StringBuilder();
                Delegate[] arrayOfDelegate 
    = status.GetInvocationList();
                
    foreach (GetStatus s in arrayOfDelegate)
                
    {
                    
    try
                    
    {
                        sb.AppendFormat(
    "{0}{1}{1}", s(), Environment.NewLine);
                    }

                    
    catch (InvalidOperationException e)
                    
    {
                        Object component 
    = s.Target;
                        sb.AppendFormat(
    "Failed to get status from{1}{2}{0}Error:{3}{0}{0}",
                            Environment.NewLine,
                            ((component 
    == null? "" : component.GetType() + "."),
                            s.Method.Name,
                            e.Message);
                    }

                }

                
    return sb.ToString();
            }

        }
    158C#为委托提供的语法便利
  • 相关阅读:
    【随笔】野生在左 科班在右——数据结构学习誓师贴
    javascript基础修炼(7)——Promise,异步,可靠性
    express中间件系统的基本实现
    javascript基础修炼(6)——前端路由的基本原理
    javascript基础修炼(5)—Event Loop(Node.js)
    一统江湖的大前端(7)React.js-从开发者到工程师
    一统江湖的大前端(6)commander.js + inquirer.js——懒,才是第一生产力
    一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅
    Jmeter接口测试之用户自定义变量(九)
    Jmeter4.0接口测试之案例实战(七)
  • 原文地址:https://www.cnblogs.com/tenghoo/p/1208443.html
Copyright © 2011-2022 走看看