El C# (no el patrón) delegado podría ser útil cuando se está implementando la delegate pattern tan sólo mirar a esta implementación patrón delegado de Wikipedia con mis cambios:
//NOTE: this is just a sample, not a suggestion to do it in such way
public interface I
{
void F();
void G();
}
public static class A
{
public static void F() { System.Console.WriteLine("A: doing F()"); }
public static void G() { System.Console.WriteLine("A: doing G()"); }
}
public static class B
{
public static void F() { System.Console.WriteLine("B: doing F()"); }
public static void G() { System.Console.WriteLine("B: doing G()"); }
}
public class C : I
{
// delegation
Action iF = A.F;
Action iG = A.G;
public void F() { iF(); }
public void G() { iG(); }
// normal attributes
public void ToA() { iF = A.F; iG = A.G; }
public void ToB() { iF = B.F; iG = B.G; }
}
public class Program
{
public static void Main()
{
C c = new C();
c.F(); // output: A: doing F()
c.G(); // output: A: doing G()
c.ToB();
c.F(); // output: B: doing F()
c.G(); // output: B: doing G()
}
}
vez delegar podría ser útil en este caso, pero no es porque fue introducido. Debería verlo como en la construcción de bajo nivel en lugar del patrón. En el par con el events que podría ser utilizado para implementar publisher/subscriber(observer) pattern - basta con ver this article, o que a veces se podría ayudar a poner en práctica visitor pattern - esto se utiliza activamente en la LINQ:
public void Linq1()
{
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
// n => n < 5 is lambda function, creates a delegate here
var lowNums = numbers.Where(n => n < 5);
Console.WriteLine("Numbers < 5:");
foreach (var x in lowNums)
{
Console.WriteLine(x);
}
}
En resumen: una El delegado de idioma no es el patrón en sí mismo, solo le permite operar funciones como first class objects.
Muchas gracias, muy claro – R4j