- class Super { }
- class Sub : Super { }
class Super { }
class Sub : Super { }
上記の様に、クラスに継承関係がある場合、以下のようなメソッド呼び出しを行ってもエラーとなりません。
#オブジェクト指向の基本です。
- public static void Hoge(Super super) { }
-
- public static void Main(string[] args)
- {
- Hoge(new Sub());
- }
public static void Hoge(Super super) { }
public static void Main(string[] args)
{
Hoge(new Sub());
}
ただ、Genericが絡んでくるとうまくいかない場合があります。例えば、以下の例はコンパイルエラーとなります。
#Javaなら大丈夫らしいですが...
- public static void Hoge(List<Super> list) { }
-
- public static void Main(string[] args)
- {
- Hoge(new List<Sub>());
- }
public static void Hoge(List<Super> list) { }
public static void Main(string[] args)
{
Hoge(new List<Sub>());
}
でも、List<Super>もList<Sub>も同じように処理したいことはあります。そんなときは↓の様に書くことになると思います。
- public static void Hoge<T>(List<T> list) where T : Super { }
public static void Hoge<T>(List<T> list) where T : Super { }
で、今日同じことをコンストラクタでやろうとしてつまづきました。↓って書けないんですね。
- public Hoge<T>(List<T> list) where T : Super { }
public Hoge<T>(List<T> list) where T : Super { }
仕方がないので、コンストラクタをprivateにして、CreateInstanceメソッドを使って初期化したんですが、一般的なやり方なのでしょうか?
- public static Hoge CreateInstance<T>(List<T> list) where T : Super
public static Hoge CreateInstance<T>(List<T> list) where T : Super
0 件のコメント:
コメントを投稿