Делегаттарды әдістен қайтару Сондай-ақ, делегаттарды әдістерден қайтаруға болады. Яғни, біз әдістен басқа әдіс түрінде қандай да бір әрекетті қайтара аламыз. Мысалы:
Operation operation = SelectOperation(OperationType.Add);
Console.WriteLine(operation(10, 4)); // 14
operation = SelectOperation(OperationType.Subtract);
Console.WriteLine(operation(10, 4)); // 6
operation = SelectOperation(OperationType.Multiply);
Console.WriteLine(operation(10, 4)); // 40
Operation SelectOperation(OperationType opType)
{
switch (opType)
{
case OperationType.Add: return Add;
case OperationType.Subtract: return Subtract;
default: return Multiply;
}
}
int Add(int x, int y) => x + y;
int Subtract(int x, int y) => x - y;
int Multiply(int x, int y) => x * y;
enum OperationType
{
Add, Subtract, Multiply
}
delegate int Operation(int x, int y);
Параметр ретінде берілген жағдайда SelectOperation() әдісі OperationType типті санауышты қабылдайды. Бұл санауышта үш тұрақты сақталады. Олардың әрқайсысына белгілі бір арифметикалық операциялар сәйкес келеді. Параметр мәніне байланысты әдістің өзінде белгілі бір әдісті қайтарамыз. Қайтарылатын әдіс типі Причем поскольку возвращаемый тип метода - делегат Operation, то метод должен возвратить метод, который соответствует этому делегату - в нашем случае это методы Add, Subtract, Multiply. То есть если параметр метода SelectOperation равен OperationType.Add, то возвращается метод Add, который выполняет сложение двух чисел:
1
case OperationType.Add: return Add;
При вызове метода SelectOperation мы можем получить из него нужное действие в переменную operation: