Heim >Backend-Entwicklung >C++ >Wie kann ich arithmetische Operatoren in eingeschränkten generischen Klassen in C# überladen?
Überladung arithmetischer Operatoren in C#-eingeschränkten generischen Klassen
In C# kann die Definition arithmetischer Operatoren für generische Klassen mit Einschränkungen eine Herausforderung darstellen. Betrachten Sie die folgende generische Klassendefinition:
<code class="language-csharp">public class ConstrainedNumber<T></code>
Unter diesen gelten Einschränkungen wie IComparable und IEquatable für primitive numerische Typen wie int und float.
Da T selbst keine inhärenten arithmetischen Operatoren hat, schlägt die Verwendung der Syntax public static T operator (ConstrainedNumber<T> x, ConstrainedNumber<T> y)
zum Definieren arithmetischer Operatoren für diese Klasse fehl.
Lösung mit IConvertible
Eine Lösung besteht darin, IConvertible als Einschränkung zu verwenden. Diese Schnittstelle unterstützt die automatische Typkonvertierung und ermöglicht Operationen für verschiedene primitive Typen. Es ist jedoch wichtig zu beachten, dass einige Typen wie String und DateTime keine arithmetischen Operatoren unterstützen und eine manuelle Überprüfung oder Einschränkungen bei der Implementierung erfordern.
Das Folgende ist ein Beispiel für eine Operatorüberladung mit IConvertible:
<code class="language-csharp">public static T operator +(T x, T y) where T : IConvertible { var type = typeof(T); if (type == typeof(String) || type == typeof(DateTime)) throw new ArgumentException(String.Format("The type {0} is not supported", type.FullName), "T"); try { return (T)(object)(x.ToDouble(NumberFormatInfo.CurrentInfo) + y.ToDouble(NumberFormatInfo.CurrentInfo)); } catch (Exception ex) { throw new ApplicationException("The operation failed.", ex); } }</code>
Durch die Verwendung von IConvertible können wir arithmetische Operationen für eine Vielzahl primitiver numerischer Typen ausführen und gleichzeitig nicht unterstützte Typen ordnungsgemäß verarbeiten. Dies bietet eine Lösung zum Hinzufügen arithmetischer Operatoren zu generischen Klassen mit Einschränkungen in C#.
Das obige ist der detaillierte Inhalt vonWie kann ich arithmetische Operatoren in eingeschränkten generischen Klassen in C# überladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!