2011-12-30 81 views
5

我想问一下,你能做类似这样的事吗?C#添加对象(类似于代表)

Event += eventInstance; 

事件是一类

我想要做类似的东西来代表:

Write write1 = new Write(() => Console.WriteLine("Write1")); 
Write write2 = new Write(() => Console.WriteLine("Write2")); 
Write write3 = new Write(() => Console.WriteLine("Write3")); 

Write write = write1 + write2 + write3; 
write(); 

感谢。

+0

参见http://stackoverflow.com/q/1134206/34397 – SLaks 2011-12-30 02:33:35

回答

6

重载+ operator并组合代表。事情是这样的:

public class Write 
{ 
    private readonly Action _act; 

    public Write(Action act) 
    { 
     _act = act; 
    } 

    public void Invoke() 
    { 
     _act(); 
    } 

    public static Write operator +(Write left, Write right) 
    { 
     //Do appropriate null-checking. 
     var del = (Action)Delegate.Combine(left._act, right._act); 
     return new Write(del); 
    } 
} 

,并用它像这样:

Write write1 = new Write(() => Console.WriteLine("Write1")); 
Write write2 = new Write(() => Console.WriteLine("Write2")); 
Write write3 = new Write(() => Console.WriteLine("Write3")); 

Write writeall = write1 + write2 + write3; 
writeall.Invoke(); 

将打印

Write1 
Write2 
Write3
3

是的。
只需创建一个operator +

你的类应该是不可变的,你可能会想要使用一个扁平化的成员列表。

4

您需要为您的班级实施operator overloading

class Write 
{ 
    public static Write operator +(Write w1, Write w2) 
    { 
     // implementation, must return Write object 
    } 
}