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#为委托提供的语法便利
  • 相关阅读:
    数组的学习——有序数组中插入及删除数值的问题分析
    关于控制台输入年月,显示该月日历的问题分析
    关于控制台的输入,分支结构及循环的用法的一些总结
    坚持学习,坚持写博客,记录学习的点点滴滴,先从学习JAVA开始!
    Immutable Object模式
    Windows GIT SSH 免密教程
    腾讯云服务器购买
    Centos7系统中安装JDK、Tomcat、Mysql
    SonarQube使用教程
    UEditor使用说明
  • 原文地址:https://www.cnblogs.com/tenghoo/p/1208443.html
Copyright © 2011-2022 走看看