全体表示

[ リスト ]

きょーたさんのブログの影響と、
先日C#のコーディングをしていたときに、なんかひっかかったことがあったので試してみた。

List<抽象Class>は可能か?


ひっかかったことってのはこれ。
List<T>に抽象クラスを利用しようとしてコンパイルエラーがでたような気がしたんですよ。
でも、List<T>自体はオブジェクトの参照を保持しているはずなので、別に型自体は抽象でもいいはず・・・

ってことで、この仮説を確かめるべくコードを書いてみました。

抽象クラス
public abstract class AbstractClass
{
public abstract void function();
}

これを継承したサブクラス
public class ConreteAbstractClass : AbstractClass
{
public override void function()
{
Console.WriteLine("ConreteAbstractClass");
}
}

おまけにもういっこサブクラス
public class ConcreteAbstractClass2 : AbstractClass
{
public override void function()
{
Console.WriteLine("おまけ:ConreteAbstractClass2");
}
}

実際にリストにして使ってみる
static void Main(string[] args)
{
//AbstractClass ac = new AbstractClass(); これはできない。抽象クラスだから。

List<AbstractClass> aclist = new List<AbstractClass>();
aclist.Add(new ConcreteAbstractClass());
aclist.Add(new ConcreteAbstractClass2());
foreach (AbstractClass ac in aclist)
{
ac.function();
}
}

実行結果
ConreteAbstractClass
おまけ:ConreteAbstractClass2

な〜んだ、List<T>に抽象クラスを指定できるじゃ〜ん♪
となると、あのコンパイルエラーは何によるものだったんだろう・・・


注釈1:List<T>は「T型のものをリスト構造として保持するクラス」。<T>の部分はGeneric(汎用)な部分で、Listオブジェクト生成時にどんな型でも受け取れるように汎用化されているもの。List<T>登場以前は、ArrayListが同様の機能をもっており、こいつはobject型(すべてのクラスの親クラス)を受け取るような仕様。保持している参照を取り出したあと、必ず目的の型にキャストしないといけなくて、面倒だった。

注釈2:抽象クラスは、そのクラスをインスタンス化(newして使うこと)して使えないクラスのこと。そんなのが何の役に立つかって? それは継承させたりすることで意味が生まれるんです。ムフッ♪
上記の例では、AbstractClassを継承したサブクラス2つを1つのForEachで扱ってます。こういう使い方がしたいときには抽象クラスは便利です。
Dictionary<T>を使って押されたキーの種類毎に処理を振るとかね。

閉じる コメント(2)

顔アイコン

お〜
ありがとうございます。
まだどうも抽象クラスとかそういうのが解ってなかったので勉強になります。
さらっとこんなコードを書けてしまうのがすごいですね。
僕ももっと勉強しますよ。

2008/11/9(日) 午後 9:52 [ - ] 返信する

仕事の合間を縫ってC#勉強してます(^^v
オブジェクト指向言語はもともとC++でやってたので、
この辺は一通り知ってるんです
でも、.NET Frameworkのところがまだまだで(> <

2008/11/10(月) 午後 7:55 [ yatch ] 返信する

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事