2014-05-02 12 views
14

Tôi đang cố gắng tạo một danh sách chứa các phương thức và sau khi tôi thêm một số phương thức tôi muốn thực hiện chúng, điều này có khả thi không?Cách tạo danh sách các phương thức sau đó thực thi chúng?

tôi đã cố gắng một cái gì đó như thế này:

List<object> methods = new List<object>(); 

Sau đó:

methods.Add(Move()); 

Nhưng Khi tôi thêm, chương trình sẽ gọi các phương pháp, ví dụ, trong trường hợp này nó gọi cho Move();

Trả lời

20

Đây là trường hợp sử dụng tuyệt vời cho đại biểu chung của Action.

List<Action> functions = new List<Action>(); 
functions.Add(Move); 

foreach (Action func in functions) 
    func(); 

Nếu bạn cần các thông số, tôi sẽ sử dụng lambdas cho họ trừu tượng đi:

List<Action> functions = new List<Action>(); 
functions.Add(Move); 
functions.Add(() => MoveTo(1, 5)); 

foreach (Action func in functions) 
    func(); 

Một đại biểu là giống như con trỏ hàm từ C++, nó giữ những gì một chức năng "là" (không phải là một sự trở lại giá trị như trong ví dụ của bạn) để bạn có thể gọi nó giống như một hàm bình thường. Hành động đại biểu chung không có tham số và trả về không có gì, vì vậy nó là lý tưởng cho chung "gọi các chức năng này".

MSDN cho Hành động: Action Delegate

+0

Cảm ơn !! nó làm việc tốt bây giờ (: – user3491915

+0

là thực hiện một 'Danh sách ' cần thiết Có vẻ như chỉ đơn giản là xác định 'Action yourFunction; 'và phụ thêm không? các phương thức để nó hoạt động bằng '+ =' chúng, như vậy 'yourFunction + = DoThis; yourFunction + = DoThat;' Chỉ có sự sụp đổ là, tôi không hoàn toàn chắc chắn nó lặp lại nó như thế nào, vì vậy nếu bạn cần mức điều khiển đó Một danh sách có thể phù hợp hơn – bigp

+0

@bigp Bạn có thể làm điều này bởi vì tất cả các đại biểu đều là multicast. Cá nhân tôi thích rõ ràng ở đây, nếu tôi muốn sử dụng + = Tôi sẽ sử dụng một sự kiện. điều mặc dù – BradleyDotNET

1

Bạn có thể sử dụng các đại biểu. Tạo danh sách đại biểu. Sau đó, đối với mỗi phương thức bạn muốn thêm vào danh sách, hãy tạo một đại biểu và thêm vào danh sách.

List<Delegate> methods = new List<Delegate>(); 

// creates an Action delegate implicitly 
methods.Add((Action)Move); 
+0

Cám ơn sự chú ý của bạn (: – user3491915

Các vấn đề liên quan