2011-12-30 36 views
5

Tôi muốn hỏi, bạn có thể làm điều gì đó tương tự như vậy không?C# thêm đối tượng (tương tự như đại biểu)

Event += eventInstance; 

tổ chức sự kiện là một lớp

tôi muốn làm một cái gì đó tương tự như các đại biểu:

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

Cảm ơn.

+0

Xem thêm http://stackoverflow.com/q/1134206/34397 – SLaks

Trả lời

6

Quá tải + operator và kết hợp các đại biểu. Một cái gì đó như thế này:

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

Và sử dụng nó như vậy:

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

Sẽ in

Write1 
Write2 
Write3
3

Có.
Chỉ cần tạo một operator +.

Lớp học của bạn sẽ không thay đổi và có thể bạn sẽ muốn sử dụng danh sách thành viên được làm phẳng.

4

Bạn cần triển khai operator overloading cho lớp học của mình.

class Write 
{ 
    public static Write operator +(Write w1, Write w2) 
    { 
     // implementation, must return Write object 
    } 
} 
Các vấn đề liên quan