2013-07-26 31 views
22

Điều này có vẻ là một câu hỏi ngớ ngẩn, nhưng nó chỉ vì mục đích tò mò.Đại biểu so với Hành động, Func trong C#

Chúng tôi có hai đặc biệt các đại biểu đã được định nghĩa trong C#:

hành động đóng gói phương pháp nào "khoảng trống" mà mất 0 hoặc nhiều tham số.
Func đóng gói phương thức trả về loại giá trị cụ thể và nhận 0 tham số trở lên.

Câu hỏi của tôi là: trong trường hợp nào bạn nên xác định đại biểu tùy chỉnh?
Tại sao bạn cần phải làm điều đó?

Cảm ơn trước

+0

Các đại biểu đã có mặt trước khi Func và Hành động và theo nhiều cách họ phục vụ như các thiết bị tương thích ngược. Tuy nhiên, có những trường hợp khi bạn không thể đi lại nhưng tạo đại biểu của bạn. –

+1

Xem http://www.youtube.com/watch?v=8o0O-vBS8W0 Có thể hữu ích. – RahulD

Trả lời

38

Không ai trong số các Func hoặc Action loại phép out hoặc ref thông số, vì vậy bạn sẽ phải xác định các đại biểu của riêng bạn nếu bạn cần phải sử dụng những ví dụ:

public delegate bool TryParse<T>(string s, out T value); 
+1

Đúng là khá logic. Tôi không biết nếu đó là ý định yuor, nhưng bạn chỉ làm cho tôi nhận ra rằng hành động và Func không cho phép các thông số loại, một trong hai.
Cảm ơn rất nhiều! – anfri

+0

Bạn có hai loại trả lại trong ủy quyền của mình. Tôi nghĩ rằng bạn có nghĩa là: đại biểu công cộng ** bool ** TryParse (chuỗi s, giá trị T ra); Tôi ước tôi có thể chỉnh sửa nó, nhưng quy tắc 6 ký tự vẫn được áp dụng. – user886079

+0

@ user886079 - Vâng tôi có nghĩa là 'bool', cảm ơn. – Lee

2

Trong hàng ngàn trường hợp bạn sẽ cần phải tham chiếu/trỏ đến một hàm (do đó một đại biểu, nếu thực hiện thực tế của hàm sẽ thay đổi vào thời gian chạy, ngoại trừ chữ ký) không khớp với một trong các đại biểu đã cho. Nói

Đại biểu công khai T MyDel (T, U u, V v);

+0

Bạn hoàn toàn đúng. Cảm ơn người đàn ông! – anfri

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