2009-04-08 689 views
37

Có một số đại biểu được xác định trước trong C#đại biểu tiêu chuẩn trong C#

Tôi biết những:

EventHandler // Default event callbacks 
EventHandler<T> // Default event callbacks with custom parameter (inheriting from EventArgs) 
Action // Function without return value and without parameter 
Action<T1, T2, T3, T4> // Function without return value and 1-4 parameters 
Func<T1, T2, T3, T4, TResult> // Methos with 0-4 parameters and one result type 
Predicate<T> // equivalent to Func<T, bool> 

Có nhiều hơn cho trường hợp đặc biệt và tạo ra phần hình thức của khuôn khổ này, nhưng đây là những thường tốt để sử dụng trong mã tự viết.

Nếu bạn biết một số hữu ích hơn, hãy thêm chúng. Nếu không, điều này sẽ được trả lời.

+3

Muốn mở lại và chuyển nó thành trang cộng đồng wiki. – Tarion

Trả lời

23

Chúng không được xác định trước trong C#. Chúng được xác định theo khung .

Các gia đình ActionFunc đại biểu là rộng hơn so với bạn đã thể hiện - họ đi lên đến

Action<T1, T2, T3, T4> 

Func<T1, T2, T3, T4, TResult> 

Một trong những phổ biến-ish trong .NET 2.0 cho danh sách các thao tác (trước LINQ) là Predicate<T>.

Để làm việc với chủ đề:

ThreadStart 
ParameterizedThreadStart 
WaitCallback 
TimerCallback 
AsyncCallback 
+0

Nó làm cho bạn tự hỏi mặc dù. Nếu generics và Func/Action có sẵn trong 1.0, chúng ta sẽ có bất kỳ loại đại biểu nào khác không? – JaredPar

+0

Đó là một câu hỏi thú vị. Tôi thích Predicate như một tên có ý nghĩa hơn Func ví dụ - nếu nó không được cho quá tải ở đâu vv để có Func nó sẽ là một phù hợp hơn cho LINQ. Chỉ định các đối số kiểu ở mọi nơi có thể làm tổn thương khả năng đọc. –

2

Goto Reflector Tìm kiếm System.MulticastDelegate và kiểm tra các loại có nguồn gốc. Bạn sẽ nhận được danh sách của tất cả các đại biểu bạn đang tìm kiếm.

+0

Vâng, điều đó cung cấp danh sách đầy đủ các đại biểu. Nó không đưa ra những cái hữu ích nhất hoặc quan trọng nhất, đó là những gì mà OP là sau khi tôi nghĩ. –

3

Tôi thích sử dụng Predicate<T> tương đương với Func<T, bool>

0

tôi sử dụng WaitCallbackThreadStart thường đủ để họ có được một đề cập đến.

Nếu bạn biết chữ ký của các đại biểu bạn sau đó, nhưng bạn không biết nếu có một đại biểu hiện với chữ ký mà bạn có thể sử dụng, bạn có thể làm theo these instructions trên blog của tôi để tìm một .

+0

Liên kết dường như không hợp lệ nữa. –

0

System.Windows.ValidateValueCallback đại diện cho phương thức được sử dụng làm cuộc gọi lại xác thực giá trị hiệu dụng của thuộc tính phụ thuộc.

Đọc thêm: MSDN: ValidateValueCallback Delegate

1

Tôi cũng đã đi qua

Comparison<T> 

trong

List.Sort(Comparison<T>) 

generic method. Tôi cho rằng điều này bây giờ tương đương với:

Func<T1, T2, int>