- ベストアンサー
C#のジェネリッククラスを使って座標クラスを作成する方法
- C#で座標クラス(XY座標を計算するクラス)を作成する際に、ジェネリッククラスを使用する方法を探しています。
- ジェネリッククラスを使用することで、座標クラスに用いるデータの型を汎用的に設定することができます。
- しかし、ジェネリッククラスを使用する場合、基本的な演算子の使用が制限されるため、演算を可能にする方法を模索中です。また、値の型に制限を加える方法も知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
C#のジェネリックで演算子が使用できないのは有名な決まりです。 残念ながら、直接的な解決方法はほとんどありません。 このページにいくつか案が挙げられているので、参考になると思います。 http://ufcpp.net/study/csharp/sm_genericop.html ちなみに、上のページには「1. C# 4.0 で導入される dynamic キーワードを使う」について詳しく書かれていないので、簡単に例を書いておきます。 class Vector<T> { T x, y; Vector(T x, T y) {} static Vector<T> Add(Vector<T> v1, Vector<T> v2) { dynamic x = v1.x; dynamic y = v2.y; return new P<T>(x + v2.x, y + v2.y); } static Vector<T> operator+(Vector<T> v1, Vector<T> v2) { return Add(v1, v2); } }
その他の回答 (1)
- hogya
- ベストアンサー率67% (49/73)
独自のデータ型を定義した後に演算子のオーバーロードを定義すればご希望にそうような形にできそうな気がします。 この場所で全て説明するのも難しいので、まずは下記のようなまとめサイトをご覧になって試されてはいかがでしょう。詳細な部分はC#はクラスライブラリリファレンスが充実していますので、そちらを参照すればよいかと思います。 プログラミング歴がお長いのでそれほど難しくはないと思います。 http://ufcpp.net/study/csharp/oo_operator.html また、ジェネリック型の型の制限については、ジェネリック型パラメータの制約を使うことによって、型パラメータを特定の基本クラスを持つ型、既定のコンストラクタを持つ型、参照型または値型である型に制約することができます。
お礼
回答ありがとうございます. 一度試してみます^^
お礼
例まで挙げていただき,回答ありがとうございます^^ URLも参考にして,もう一度違う方向で試行錯誤してみます