2013-08-11 36 views
13

Tôi cần một cách để xác định một phương pháp trong C# như thế này:Đi qua một chức năng như tham số

public String myMethod(Function f1,Function f2) 
{ 
    //code 
} 

Hãy f1 là:

public String f1(String s1, String s2) 
{ 
    //code 
} 

là có cách nào để làm điều này?

+1

[C# đại biểu, phương thức ẩn danh và biểu thức Lambda] (http://www.codeproject.com/Articles/47887/C-Delegates-Anonymous-Methods-and-Lambda-Expressio) – I4V

Trả lời

23

Chắc chắn bạn có thể sử dụng Func<T1, T2, TResult> đại biểu:

public String myMethod(
    Func<string, string, string> f1, 
    Func<string, string, string> f2) 
{ 
    //code 
} 

đại biểu này định nghĩa một hàm mà có hai tham số chuỗi và trả về một chuỗi. Nó có rất nhiều người anh em họ để xác định các hàm có số lượng tham số khác nhau. Để gọi myMethod với phương pháp khác, bạn chỉ có thể vượt qua trong tên của phương pháp này, ví dụ:

public String doSomething(String s1, String s2) { ... } 
public String doSomethingElse(String s1, String s2) { ... } 

public String myMethod(
    Func<string, string, string> f1, 
    Func<string, string, string> f2) 
{ 
    //code 
    string result1 = f1("foo", "bar"); 
    string result2 = f2("bar", "baz"); 
    //code 
} 
... 

myMethod(doSomething, doSomethingElse); 

Tất nhiên, nếu tham số và kiểu trả về của f2 không giống hệt nhau, bạn có thể cần phải điều chỉnh chữ ký phương thức cho phù hợp.

+3

Ngoài ra: khi bạn muốn để thực thi f1 và f2, bạn chỉ cần gọi chúng là các phương thức. string result = f1 ("first", "second"); –

+1

Có nghĩa là tôi phải gọi họ bằng tên (Jeroen van Langen)? –

+0

@ Babak.Abad Tôi đã cung cấp một ví dụ về cách gọi 'f1' hoặc' f2' làm hàm. –

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