2011-12-30 16 views
5

Quiero preguntar, ¿puedes hacer algo similar a esto?C# agregar objetos (similar a delegados)

Event += eventInstance; 

de eventos es una clase

Quiero hacer algo similar a los delegados:

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(); 

Gracias.

+0

Véase también http://stackoverflow.com/q/1134206/34397 – SLaks

Respuesta

6

Sobrecargue el + operator y combine los delegados. Algo como esto:

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); 
    } 
} 

Y su uso, así:

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(); 

imprimirá

Write1 
Write2 
Write3
3

Sí.
Solo crea un operator +.

Su clase debe ser inmutable, y es probable que desee utilizar una lista aplanada de miembros.

4

Necesita implementar operator overloading para su clase.

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