Zum Hauptinhalt springen

Delegate

Delegate - Anweisung

Über delegate kann eine Methode als Object übergeben werden. Dafür müssen der Rückgabewert und die Parameter gleich der angegeben Methode sein. Um dieses sicherzustellen wurde im Beispiel ein Interface verwendet, was aber nicht zwingend erforderlich ist.

Beispiel

internal interface ICalc
{
public double CalcTwoNumbers(double number1, double number2);
}

internal class AddNumbers : ICalc
{
public double CalcTwoNumbers(double number1, double number2)
{
return number1 + number2;
}
}

internal class SubtractNumbers : ICalc
{
public double CalcTwoNumbers(double number1, double number2)
{
return number1 - number2;
}
}

internal class DivideTwoNumbers : ICalc
{
public double CalcTwoNumbers(double number1, double number2)
{
return number1 / number2;
}
}

internal class MulitplicateNumbers : ICalc
{
public double CalcTwoNumbers(double number1, double number2)
{
return number1 * number2;
}
}

internal class DelegateExample
{
private delegate double CalculatHandler(double number1, double number2);
public static void Run()
{
CalculatHandler calculator;

while (true)
{
Console.WriteLine("1 - Addieren, 2 - Subtraieren, 3 - Mulipilzieren, 4 - Dvidieren:");
int choice = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Nummber 1: ");
double number1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Number 2: ");
double number2 = Convert.ToDouble(Console.ReadLine());

switch (choice)
{
default:
calculator = new AddNumbers().CalcTwoNumbers;
break;
case 2:
calculator = new SubtractNumbers().CalcTwoNumbers;
break;
case 3:
calculator = new MulitplicateNumbers().CalcTwoNumbers;
break;
case 4:
calculator = new DivideTwoNumbers().CalcTwoNumbers;
break;
}
double result = calculator(number1, number2);
Console.WriteLine($"Das Ergebnis ist {result}\n\n");
}
}
}

Kommentare