人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

●質問者: aoi
●カテゴリ:コンピュータ
✍キーワード:.NET Framework ABC C# インターフェイス エラー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● akagi_paon
●35ポイント

そんなもんです。

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

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

◎質問者からの返答

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

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


2 ● freemann
●35ポイント

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

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

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

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

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ