Универсальный делегат это
C# делегат с параметрами любого типа.
Другими словами это указатель на метод с параметрами любого типа.
Синтаксис
delegate имя_шаблона_out
Имя_Делегата<имя_шаблона1, имя_шаблона2, ..., имя_шаблона_out>(имя_шаблона1 value1, имя_шаблона2 value2, ...)
C#
using System;
namespace ConsoleApplication1
{
class MyCalculator
{
public delegate double MyOperation<T1, T2>(T1 value1, T2 value2);
}
class Program
{
static void Main(string[] args)
{
// считаем сумму
MyCalculator.MyOperation<int, int> myOperation1 = MySum;
double result1 = myOperation1(2, 6);
Console.WriteLine(result1);
// считаем разность
MyCalculator.MyOperation<string, double> myOperation2 = MyMinus;
double result2 = myOperation2("5", 1.2);
Console.WriteLine(result2);
}
static public double MySum(int v1, int v2)
{
return v1 + v2;
}
static public double MyMinus(string v1, double v2)
{
return double.Parse(v1) - v2;
}
}
}
В библиотеке C# уже написаны универсальные делегаты
Action, Predicate, Func, которые много где используются