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.