多播委托

 

public delegate void Mydel();
class Program
{
    static void Main(string[] args)
    {
        Mydel del = T1;
        del += T2;
        del += T3;
        del += T4;
        del -= T2;
        del();        
    //等价于,反编译器查看:

    Mydel del = new Mydel(Program.T1);
    del = (Mydel)Delegate.Combine(del, new Mydel(Program.T2));//Combine返回的是父类类型,需要强转子类
    del = (Mydel)Delegate.Combine(del, new Mydel(Program.T3));
    del = (Mydel)Delegate.Combine(del, new Mydel(Program.T4));
    del = (Mydel)Delegate.Remove(del, new Mydel(Program.T2));
    del();

        Console.ReadKey();
    }
    public static void T1()
    {
        Console.WriteLine("我是T1");
    }
    public static void T2()
    {
        Console.WriteLine("我是T2");
    }
    public static void T3()
    {
        Console.WriteLine("我是T3");
    }
    public static void T4()
    {
        Console.WriteLine("我是T4");
    }
}

 

class Program
{
    static void Main(string[] args)
    {
        Action<string> action = T1;
        action += T2;
        action += T3;
        action += T4;
        action("你好");
        Console.ReadKey();
    }
    public static void T1(string s)
    {
        Console.WriteLine("我是T1"+s);
    }
    public static void T2(string s)
    {
        Console.WriteLine("我是T2" + s);
    }
    public static void T3(string s)
    {
        Console.WriteLine("我是T3" + s);
    }
    public static void T4(string s)
    {
        Console.WriteLine("我是T4" + s);
    }
}

反编译器:
private static void Main(string[] args)
{
    Action<string> action = new Action<string>(Program.T1);
    action = (Action<string>)Delegate.Combine(action, new Action<string>(Program.T2));//Combine返回的是父类类型,需要强转子类
    action = (Action<string>)Delegate.Combine(action, new Action<string>(Program.T3));
    action = (Action<string>)Delegate.Combine(action, new Action<string>(Program.T4));
    action("你好");
    Console.ReadKey();
}

 

posted @ 2015-10-18 11:34  黄者之风  阅读(184)  评论(0)    收藏  举报