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#为委托提供的语法便利
  • 相关阅读:
    c#添加托盘图标右键后显示菜单选项
    mysql workbench修改字段报错
    mysql增删改查语句
    连接win7的mysql很慢解决方法
    uvm_cmdline_processor
    cadence help文件库调出指令 :cdnshelp
    设置开机自动运行vncserver
    Vector bit-select and part-select addressing verilog片选写法
    Verilog三段式状态机描述
    同步FIFO学习
  • 原文地址:https://www.cnblogs.com/tenghoo/p/1208443.html
Copyright © 2011-2022 走看看