C#…というより.net Frameworkになると思いますが、ジェネリックとキャストについて質問です。


AbcクラスはIAbcインターフェイスを実装しているとします。

このとき、
List<IAbc> abc = new List<Abc>();
とすると、型変換エラーとなりコンパイルができません。

IAbc abc = new Abc();
は可能ので上記のエラーも問題ないように思うのですが・・・

そんなものでしょうか?
もし、簡単にできる方法があれば教えてください。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/08/25 18:13:38
  • 終了:2010/08/29 12:05:01

回答(2件)

id:akagi_paon No.1

akagi_paon回答回数143ベストアンサー獲得回数132010/08/25 21:56:22

ポイント35pt

そんなもんです。

List<IAbc> abc = new List<IAbc>();

とすればコンパイル通りますよ^^

id:atcsugi

返答遅くなりましたがありがとうございました。

できないことがわかっただけでも助かりました。

2010/08/29 11:37:58
id:freemann No.2

freemann回答回数315ベストアンサー獲得回数502010/08/26 01:49:38

ポイント35pt

<T>を使うものをジェネリックといいますが、これは左辺と右辺で<T>のTが同一でなければいけません。

つまり、型Tを使う事を指定しています。

また、List<Abc>とList<IAbc>は違う型と認識されます。

どちらも、大まかにいえばList型であって、中に保持する型がIAbcなのかAbcなのかなので、そこが継承関係にあるからといって外側の型(List<T>)が継承関係になるとは言えないのです。

それに対して、質問者さんが示されているIAbc abc = new Abc();は、継承関係がきちんとなっていれば良い事になります。

id:atcsugi

返答おそくなりすみません。ありがとうございました。

2010/08/29 12:04:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません