Statische Interface Member?

1 Antwort

Von Experte FaTech bestätigt

Es handelt sich um ein Feature, welches in C# 11 eingeführt wurde. Die Idee dahinter ist, nun auch statische Verhaltensweisen als generische Constraints vorgeben zu können.

Also zum Beispiel bei Typen, die einen bestimmten Operator überladen, da Operatorüberladungen immer statisch sein müssen.

Angenommen, du möchtest eine Methode schreiben, die mehrere Zahlen addiert. Wenn du das für verschiedene numerische Typen (int, double, ...) brauchst, müsstest du dir eigentlich je Typ eine eigene Methode erstellen. Einfacher geht es stattdessen mit so einer generischen Methode:

public T GetSum<T>(params T[] numbers) where T: INumber<T>
{
  T sum = T.Zero;

  foreach(var number in numbers)
  {
    sum += T.CreateChecked(number);
  }

  return sum;
}

INumber ist hierbei ein Interface, welches eine Operatorenüberladung für + vorgibt (bzw. diese Vorschrift vom Interface IAdditionOperators erbt).

Die Kombination aus static und abstract ergibt sich daraus, dass nochmals deutlich gemacht werden soll, dass es sich nur um eine Methodendeklaration handelt, denn im Gegensatz dazu ist es auch möglich, statische Methodendefinitionen in Interfaces anzuführen.