ページ 11

ジェネリックスの制約条件について

Posted: 2014年2月11日(火) 20:35
by シャープ
お久しぶりです。
現在C#のジェネリックスについて学習し始めたところなのですが、
制約条件について質問させていただきたいと思います。

http://ufcpp.net/study/csharp/sp2_generics.html#where
こちらのサイトを参考にさせていただいて学習しているのですが、
制約条件についてIComparableやその他のものがあることはわかるのですが
たとえば「+=」ができること、計算ができる値であること、というような
制約条件をつけるときはどうしたらよいのでしょうか。
できれば、その直接的な答えというよりは「このように調べればよい」
というようなご回答を頂ければ大変ありがたく存じます。


よろしくお願いいたします。

Re: ジェネリックスの制約条件について

Posted: 2014年2月11日(火) 21:32
by h2so5
独自のインターフェースを作ってそれを制約条件に指定すれば良いと思います。

Re: ジェネリックスの制約条件について

Posted: 2014年2月11日(火) 21:36
by シャープ
「計算ができるような値」であることを定義するための制約条件を作成できる
インターフェイスや基底クラスなどは存在しないということでよろしいでしょうか?
申し訳ございませんが当方学習中の身であるため、詳細なご説明を頂ければと存じます。
なにとぞよろしくお願いいたします。

Re: ジェネリックスの制約条件について

Posted: 2014年2月11日(火) 23:16
by h2so5
少なくともBuilt-inのインターフェースに演算子のオーバーロードを指定するようなものは存在しないということです。
http://msdn.microsoft.com/ja-jp/library/System.aspx

Re: ジェネリックスの制約条件について

Posted: 2014年2月12日(水) 07:52
by (シャープです)
了解いたしました。ご回答を有難うございました。
指定していただいたURLを確認しましたが、こちらに該当するような
機能がない場合はジェネリックスの制約条件としても存在しない
ということでよろしいでしょうか。
また、ジェネリックスの制約条件を探そうとするときはこの中から探せば良いということで
まちがいありませんでしょうか。

加えて、与えられた値を計算して返すようなジェネリックスメソッドを作成する方法があればご教授下さい。

何卒よろしくお願いいたします。

Re: ジェネリックスの制約条件について

Posted: 2014年2月12日(水) 09:12
by バグ
私も似たような事で不便を感じて色々検索したことがありました。
おそらく、こんな事をしたいんじゃないかなぁ・・・というのを紹介しているとこがありましたので紹介しておきます。

http://ufcpp.net/study/csharp/sm_genericop.html
http://ap.atmarkit.co.jp/bbs/core/fdotnet/25496?page=1

正直、C++と比較するとかなり面倒くさく感じますが、言語仕様なので仕方ないのかな・・・(^_^;)

Re: ジェネリックスの制約条件について

Posted: 2014年2月12日(水) 20:14
by シャープ
ご回答をありがとうございます。
バグ 様のご回答によって、直接の答えだけでなく自分が今やろうとしていることのイメージすらもつかめたように感じます。
C#で四則演算のあるジェネリックスメソッドを作成しようとすることは、当然行われるべきことではなくどちらかというと発展的な操作なのだというように理解いたしました。
以上のご回答をもちましてこのトピックは解決とさせていただきます。
何か私の思い違いなどございましたらお手数ですがご指摘いただければと思います。

ありがとうございました。