ホームページ > バックエンド開発 > C++ > C# で制約付きジェネリック クラスの算術演算子をオーバーロードするにはどうすればよいですか?

C# で制約付きジェネリック クラスの算術演算子をオーバーロードするにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-11 12:41:43
オリジナル
625 人が閲覧しました

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

C# 汎用クラス算術演算子のオーバーロード

C# では、ジェネリック クラスで算術演算子をオーバーロードするには、ジェネリック型が算術演算をサポートしていることを確認する方法が必要です。提供されたコードは、特定の制約なしに演算子をジェネリック型 T に適用できないことを示しています。

この問題を解決するには、IConvertible インターフェイスをジェネリック クラスの制約として使用します。このインターフェイスは、数値型を含むさまざまなデータ型間で変換するための一連のメソッドを定義します。 IConvertible 制約を使用して算術演算子のオーバーロードを実装する方法の例を次に示します。

<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>
ログイン後にコピー
この実装は、サポートされていない型 (文字列や日付など) をチェックし、加算演算を実行する前にオペランドを double 値に変換します。これにより、汎用数値型に対して算術演算を実行できるようになります。

制約を使用すると、算術演算をサポートするプリミティブ数値型を受け入れるジェネリック クラスの算術演算子を定義できます。これにより、汎用コードで数値データを操作するための柔軟でスケーラブルなソリューションが提供されます。 IConvertible

以上がC# で制約付きジェネリック クラスの算術演算子をオーバーロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート