Überlastung von Operatoreinschränkungen in .NET-Generika überwinden
In .NET erfordern generische Methoden häufig spezifische Einschränkungen für die Typen, mit denen sie arbeiten. Die Durchsetzung von Einschränkungen für Typen mit überladenen Operatoren kann sich jedoch als schwierig erweisen, da Schnittstellen keine Operatorüberladung berücksichtigen können.
Diese Frage befasst sich mit den verfügbaren Optionen für die Implementierung generischer Methoden, die Typen mit überladenen Operatoren akzeptieren, insbesondere Subtraktion.
Behebung der Einschränkung
Leider gibt es hierfür keine direkte Lösung Einschränkung. Operatoren sind statische Einheiten und können nicht in Einschränkungen ausgedrückt werden. Darüber hinaus fehlen vorhandenen Grundelementen spezifische Schnittstellenimplementierungen, die dieses Verhalten emulieren könnten.
Ansätze in .NET 3.5 und höher
Es sind jedoch Problemumgehungen in .NET 3.5 und höher verfügbar spätere Versionen:
T result = Operator.Add(first, second); // implicit <T>; here
static T Add<T>(T x, T y) { dynamic dx = x, dy = y; return dx + dy; }
Alternative: Schnittstellenbasierte Lösung
Ein anderer Ansatz besteht darin, eine Schnittstelle mit Methoden zu erstellen, die die gewünschten Operatoren darstellen:
interface ICalc<T> { T Add(T, T)() T Subtract(T, T)() }
Während diese Methode die Verwendung allgemeiner Einschränkungen überflüssig macht, führt sie dazu, dass ein ICalc
Letztendlich hängt die Wahl des Ansatzes von den spezifischen Anforderungen und Kompatibilitätsbeschränkungen des Projekts ab.
Das obige ist der detaillierte Inhalt vonWie kann ich überladene Operatoren in generischen .NET-Methoden verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!