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#为委托提供的语法便利
  • 相关阅读:
    Android核心分析 ---- 电话系统之GSMCallTacker
    Android核心分析 ----- Android电话系统之RIL-Java
    Android核心分析 ------ 电话系统之rilD
    Android核心分析 ----- Android电话系统-概述篇
    AndroidRuntime 流程
    关于++和--运算符的理解
    使用eclips开发java时的闪退问题
    Android--控件的滑动事件
    Running Hero.
    软件工程第三次大作业分工说明
  • 原文地址:https://www.cnblogs.com/tenghoo/p/1208443.html
Copyright © 2011-2022 走看看