• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#のジェネリッククラス)

C#のジェネリッククラスを使って座標クラスを作成する方法

このQ&Aのポイント
  • C#で座標クラス(XY座標を計算するクラス)を作成する際に、ジェネリッククラスを使用する方法を探しています。
  • ジェネリッククラスを使用することで、座標クラスに用いるデータの型を汎用的に設定することができます。
  • しかし、ジェネリッククラスを使用する場合、基本的な演算子の使用が制限されるため、演算を可能にする方法を模索中です。また、値の型に制限を加える方法も知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Egtra
  • ベストアンサー率100% (1/1)
回答No.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); } }

参考URL:
http://ufcpp.net/study/csharp/sm_genericop.html
hira_kazu
質問者

お礼

 例まで挙げていただき,回答ありがとうございます^^  URLも参考にして,もう一度違う方向で試行錯誤してみます

その他の回答 (1)

  • hogya
  • ベストアンサー率67% (49/73)
回答No.1

独自のデータ型を定義した後に演算子のオーバーロードを定義すればご希望にそうような形にできそうな気がします。 この場所で全て説明するのも難しいので、まずは下記のようなまとめサイトをご覧になって試されてはいかがでしょう。詳細な部分はC#はクラスライブラリリファレンスが充実していますので、そちらを参照すればよいかと思います。 プログラミング歴がお長いのでそれほど難しくはないと思います。 http://ufcpp.net/study/csharp/oo_operator.html また、ジェネリック型の型の制限については、ジェネリック型パラメータの制約を使うことによって、型パラメータを特定の基本クラスを持つ型、既定のコンストラクタを持つ型、参照型または値型である型に制約することができます。

hira_kazu
質問者

お礼

 回答ありがとうございます.  一度試してみます^^