Heim >Backend-Entwicklung >C++ >Wie kann ich arithmetische Operatoren für eingeschränkte generische Klassen in C# überladen?

Wie kann ich arithmetische Operatoren für eingeschränkte generische Klassen in C# überladen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-11 12:41:43655Durchsuche

How Can I Overload Arithmetic Operators for Constrained Generic Classes in C#?

Ü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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn