.NET ジェネリックにおけるオーバーロードされた演算子の制約の克服
.NET では、ジェネリック メソッドは、操作対象の型に対して特定の制約を必要とすることがよくあります。しかし、インターフェイスが演算子のオーバーロードに対応できないため、オーバーロードされた演算子を持つ型に制約を適用することは困難になる可能性があります。
この質問では、オーバーロードされた演算子、特に減算を含む型を受け入れるジェネリック メソッドの実装に利用できるオプションについて詳しく掘り下げます。
制約に対処する
残念ながら、この制約に対する直接的な解決策ではありません。演算子は静的なエンティティであり、制約で表現できません。さらに、既存のプリミティブには、この動作をエミュレートできる特定のインターフェイス実装がありません。
.NET 3.5 以降でのアプローチ
ただし、.NET 3.5 および .NET 3.5 では利用可能な回避策があります。それ以降のバージョン:
T result = Operator.Add(first, second); // implicit <T>; here
static T Add<T>(T x, T y) { dynamic dx = x, dy = y; return dx + dy; }
代替: インターフェイスベースのソリューション
別のアプローチには、目的の演算子を表すメソッドを使用してインターフェイスを作成することが含まれます:
interface ICalc<T> { T Add(T, T)() T Subtract(T, T)() }
このメソッドでは一般的な制約の使用が不要になりますが、 ICalc
最終的に、アプローチの選択は、プロジェクトの特定の要件と互換性の制約によって決まります。
以上が.NET ジェネリック メソッドでオーバーロードされた演算子を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。