Heim > Backend-Entwicklung > C++ > Wie kann ich arithmetische Operatoren in eingeschränkten generischen Klassen in C# überladen?

Wie kann ich arithmetische Operatoren in eingeschränkten generischen Klassen in C# überladen?

Mary-Kate Olsen
Freigeben: 2025-01-11 12:57:42
Original
241 Leute haben es durchsucht

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

Ü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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage