0 Tage Serie
csharp / expert
Snippet

Statisch-abstrakte Interface-Member

Experten-Einsatz von statisch-abstrakten Membern in Interfaces. Dies ermöglicht die Definition polymorpher Operatoren und Factory-Properties, die in generischer Logik direkt auf dem Typparameter aufgerufen werden können.

snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
public interface IMonoid<T> where T : IMonoid<T>
{
static abstract T Identity { get; }
static abstract T operator +(T left, T right);
}
public record Sum(int Value) : IMonoid<Sum>
{
public static Sum Identity => new(0);
public static Sum operator +(Sum l, Sum r) => new(l.Value + r.Value);
}
Erklärung
1
static abstract T operator +
Zwingt implementierende Typen, einen statischen Additionsoperator bereitzustellen.
2
where T : IMonoid<T>
Curiously Recurring Template Pattern (CRTP), um Typsicherheit in statischen Kontexten zu gewährleisten.