Heim >Backend-Entwicklung >C++ >Wie kann ich arithmetische Operatoren für eingeschränkte generische Klassen in C# überladen?
Überladung des arithmetischen Operators einer generischen Klasse in C#
In C# erfordert das Überladen arithmetischer Operatoren für eine generische Klasse eine Möglichkeit, sicherzustellen, dass der generische Typ arithmetische Operationen unterstützt. Der bereitgestellte Code zeigt, dass der Operator nicht ohne bestimmte Einschränkungen auf einen generischen Typ T angewendet werden kann.
Um dieses Problem zu lösen, können wir die Schnittstelle IConvertible
als Einschränkung für die generische Klasse verwenden. Diese Schnittstelle definiert eine Reihe von Methoden zum Konvertieren zwischen verschiedenen Datentypen, einschließlich numerischer Typen. Hier ist ein Beispiel für die Implementierung der Überladung arithmetischer Operatoren mithilfe der IConvertible
-Einschränkung:
<code class="language-csharp">public static operator T +(T x, T y) where T : IConvertible { Type type = typeof(T); if (type == typeof(string) || type == typeof(DateTime)) throw new ArgumentException($"类型 {type.FullName} 不受支持", "T"); try { return (T)(object)(x.ToDouble(NumberFormatInfo.CurrentInfo) + y.ToDouble(NumberFormatInfo.CurrentInfo)); } catch (Exception ex) { throw new ApplicationException("操作失败。", ex); } }</code>
Diese Implementierung prüft auf nicht unterstützte Typen (z. B. Zeichenfolgen und Datumsangaben) und konvertiert die Operanden in Double-Werte, bevor die Additionsoperation ausgeführt wird. Dadurch können arithmetische Operationen an generischen numerischen Typen ausgeführt werden.
Mithilfe der Einschränkung IConvertible
können wir arithmetische Operatoren für generische Klassen definieren, die primitive numerische Typen akzeptieren, die arithmetische Operationen unterstützen. Dies bietet eine flexible und skalierbare Lösung für die Arbeit mit numerischen Daten in generischem Code.
Das obige ist der detaillierte Inhalt vonWie kann ich arithmetische Operatoren für eingeschränkte generische Klassen in C# überladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!