Trong C#, làm thế nào để tạo một loại đại biểu ánh xạ các loại đại biểu cho một loại đại biểu? Cụ thể, trong ví dụ dưới đây, tôi muốn khai báo một đại biểu Sum
sao cho (vay từ ký hiệu toán học) Sum(f,g) = f + g
. Sau đó tôi muốn gọi Sum(f,g)
- chẳng hạn như Sum(f,g)(5)
[ý nghĩa này f(5) + g(5)
].C#: cách tạo loại đại biểu từ các loại đại biểu?
class Example
{
delegate int IntToInt (int i) ;
public static int Double (int i) { return i * 2 ; }
public static int Square (int i) { return i * i ; }
delegate IntToInt IntToIntPair_To_IntToInt (IntToInt f, IntToInt g) ;
public static IntToInt Sum (IntToInt f, IntToInt, g) { return f + g ; }
public static void Main ()
{
IntToInt DoubleInstance = Double ;
IntToInt SquareInstance = Square ;
IntToIntPair_To_IntToInt SumInstance = Sum ;
System.Console.WriteLine
(SumInstance (DoubleInstance, SquareInstance) (5)) ;
// should print 35 = 10 + 25 = Double(5) + Square(5)
}
}
Thiệt tình, bạn nhận được một câu trên một câu trả lời và bam, lại bị xiên. –
Jon: Phần mềm của tôi hơi bị lỗi thời. Có vấn đề gì khi tôi đang sử dụng CLR Version 2.0.50727.42? – JaysonFix
@JaysonFix: Có, thật không may, cú pháp lambda (x => x * 2 chẳng hạn) và các loại đại biểu Func là cấu trúc C# 3/.NET3.5. Để làm điều này trong .NET2.0 và C# 2 sẽ mất nhiều công sức hơn. –