none
ジェネリック型制約の使い方について RRS feed

  • 質問

  • 次のようにジェネリック型制約について質問です。
    1つ目のクラスは、CHNならC,H,Nの3プロパティ, CHならC,Hプロパティ, CNならC,Nプロパティを持つクラスを3つ作るとします。

    class CHN<T> : 元素インターフェース
    {
    	T C {get;set;}
    	T H {get;set;}
    	T N {get;set;}
    }
    
    class Linear
    {
    	double AX { get;set; }
    	double B  { get;set; }
    }
    
    class 実装クラス<T> : where T : 元素インターフェース
    {
    	T<double> Mass;		// 重さ
    	T<Linear> Function; 	// 傾き
    }

    実装クラス<T>はCHNやCHを指定して、なおかつ3つ目のクラスのとおりCHNの<T>は使い分けたいです。
    こういうものは可能なのでしょうか。

    よろしくお願いします。

    • 編集済み ichiethel 2015年1月15日 4:51
    2015年1月15日 4:51

回答

  • ご質問の意味を正確に把握できているか自信が無いのですが、ジェネリックのパラメータを複数指定することで解決できることなのでしょうか?

    (例)
    Action<T1, T2, T3> デリゲート
    http://msdn.microsoft.com/ja-jp/library/bb549392(v=vs.110).aspx


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク ichiethel 2015年1月15日 6:29
    2015年1月15日 5:37
    モデレータ
  • 私もよく理解できていないのですが・・・

    重さを持ったCHNと傾きを持ったCHNが別で必要なのでしょうか。
    重さと傾きを持つCHNでは駄目ということですか。

    考えているうちに、傾きと重さは元素インタフェースで約束するパラメータのような気がしてきたもので…

    • 回答としてマーク ichiethel 2015年1月15日 6:29
    2015年1月15日 5:56
    モデレータ

すべての返信

  • ご質問の意味を正確に把握できているか自信が無いのですが、ジェネリックのパラメータを複数指定することで解決できることなのでしょうか?

    (例)
    Action<T1, T2, T3> デリゲート
    http://msdn.microsoft.com/ja-jp/library/bb549392(v=vs.110).aspx


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク ichiethel 2015年1月15日 6:29
    2015年1月15日 5:37
    モデレータ
  • trapemiyaさん返信ありがとうございます。
    やりたいことはそれで違いありません。ただ、私の説明がへたなようです。すいません。T1一つですませられないか気になっています。

    class 実装クラス<T1, T2> : where T1 : 元素インターフェース where T2 : 元素インターフェース
    {
    T1 Mass; // 重さ
    T2 Function; // 傾き
    }

    返信のとおり、以下の1と同じことをしたいと考えています。
    CHNのTの部分はdouble, Functionで今回固定なので、クラス部分で固定してしまって、2のようにコード部分ではコードを少なくできないか気になっています。

    1 var a = new 実装クラス<CHN<double>, CHN<Function>>;
    2 var b = new 実装クラス<CHN>;

    ただ、2だとCHNは型として正しく認識できていないようなので、やっぱり無理なのでしょうか。

    2015年1月15日 5:51
  • 私もよく理解できていないのですが・・・

    重さを持ったCHNと傾きを持ったCHNが別で必要なのでしょうか。
    重さと傾きを持つCHNでは駄目ということですか。

    考えているうちに、傾きと重さは元素インタフェースで約束するパラメータのような気がしてきたもので…

    • 回答としてマーク ichiethel 2015年1月15日 6:29
    2015年1月15日 5:56
    モデレータ
  • Tak1waさん返信ありがとうございます。

    基本設計がわるいかもしれません。考えてみます。

    2015年1月15日 6:29