いきなりですが、↓のようなクラスがあったとします。
class Super
{
public void Write()
{
Console.WriteLine("Super");
}
}
class Sub : Super
{
public new void Write()
{
Console.WriteLine("Sub");
}
}
で、これらクラスに対し
static void Main(string[] args)
{
new Super().Write();
new Sub().Write();
((Super)new Sub()).Write();
Hoge(new Sub());
}
public static void Hoge(Sub t)
{
t.Write();
}
public static void Hoge(Super t)
{
t.Write();
}
というコードを実行した場合、結果は
Super
Sub
Super
Sub
となります。メソッドのオーバーロードが働いた結果ですね。
ここは、期待通り。で、先ほどのコードの9~16行目を
public static void Hoge<T>(T t) where T : Super
{
t.Write();
}
と書き換えた場合、結果は変わらないと思っていました。
しかし、現実は…
Super
Sub
Super
Super
となり
public static void Hoge(Super t)
{
t.Write();
}
と書いた場合と同じでした。残念。
うまくないなぁ。
0 件のコメント:
コメントを投稿