En C#, ¿cómo se crea un tipo de delegado que asigna tipos de delegados a un tipo de delegado? En particular, en mi ejemplo a continuación, deseo declarar un delegado Sum
de modo que (tomando prestado de la notación matemática) Sum(f,g) = f + g
. Entonces quiero invocar Sum(f,g)
- como Sum(f,g)(5)
[esto significa f(5) + g(5)
].C#: cómo crear un tipo de delegado a partir de tipos de delegados?
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)
}
}
Maldición, recibes una oración de una respuesta y bam, skeeted nuevamente. –
Jon: Mi software está algo anticuado. ¿Importa que esté usando la versión 2.0.50727.42 de CLR? – JaysonFix
@JaysonFix: Sí, desafortunadamente, la sintaxis lambda (x => x * 2 por ejemplo) y los tipos de delegados Func son construcciones C# 3/.NET3.5. Hacer esto en .NET2.0 y C# 2 requerirá más esfuerzo. –