Zum Hauptinhalt springen

Ereignisse (events)

Ereignisse (events)

Mit Events ist es möglich Methode zu abonnieren. Der Ablauf stellt sich wie folgt da.

Beispiel

internal class DivideNumbers
{
// An den Eventhändler kann eine Methode gebunden werden
public event EventHandler? InvalidNumber;
public double Number1 { get; set; }

private double number2;
public double Number2
{
get { return number2; }
set
{
if (value != 0)
{
number2 = value;
}
else
{
// Wenn InvalidNumber nicht null ist,
// wichtig damit der InvalidNumber in der EventExample keiner Methode zugewiesen werden soll
InvalidNumber?.Invoke(this, new InvalidMeasureEventArgs(value, "DivideNumbers"));
}
}
}

public double divide()
{
return Number1 / Number2;
}
}

internal class InvalidMeasureEventArgs : EventArgs
{
public double InvalidMeasure { get; private set; }
public string PropertyName { get; private set; }

public InvalidMeasureEventArgs(double invalidMeasure, string PropertyName)
{
this.InvalidMeasure = invalidMeasure;
this.PropertyName = PropertyName;
}
}

internal class EventExample
{
public void Run()
{
DivideNumbers divideNumbers = new DivideNumbers();
// Methode DivideNumbers_InvalidNumber wird angemeledet
divideNumbers.InvalidNumber += DivideNumbers_InvalidNumber;
// Es ist möglich InvalidNumber mehrere Methode anzumelden
//divideNumbers.InvalidNumber += DivideNumbers_InvalidNumber1;

divideNumbers.Number1 = 9;
divideNumbers.Number2 = 3;
string output = divideNumbers.divide().ToString();
Console.WriteLine($"Ergebnis ist {output}");

divideNumbers.Number1 = 9;
divideNumbers.Number2 = 0;
output = divideNumbers.divide().ToString();
Console.WriteLine($"Ergebnis ist {output}");
}

private void DivideNumbers_InvalidNumber(object sender, EventArgs e)
{
double invalidMeasure = ((InvalidMeasureEventArgs)e).InvalidMeasure;
string sInvalildMeasure = Convert.ToString(invalidMeasure);
Console.WriteLine($"Teiler darf nicht {sInvalildMeasure} sein");
Console.ReadLine();
Environment.Exit(0);
}

private void DivideNumbers_InvalidNumber1(object sender, EventArgs e)
{
throw new NotImplementedException();
}
}

Kommentare