いきなりですが、↓のようなクラスがあったとします。
- 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 件のコメント:
コメントを投稿