Override キーワードと New キーワードによるバージョン管理 (C# プログラミング ガイド)
の日本語がわかりにくい。
new
派生クラスのメソッドの前に new キーワードが記述されている場合、 そのメソッドは、基本クラスのメソッドから独立したものとして定義されます。
「基本クラスのメソッドから独立したもの」??なにそれ?
override
派生クラスのメソッドの前に override キーワードが記述されている場合、 派生クラスのオブジェクトは、基本クラスのメソッドではなく、派生クラスのメソッドを呼び出します。
「派生クラスのメソッドを呼び出します」??つまり?
10日でおぼえるC#入門教室 - arton - Google ブックス を見て、
違いがわからないので自分なりにまとめた。 「as SuperClass」でキャストした時の振る舞いが違うようだ。
まずはoverride
class SuperClass { internal int Foo () { // do something } }
のような場合
class SubClass : SuperClass { internal new int Foo () { // do something } }
var spr = new SubClass () as SuperClass; var sub = new SubClass (); // SuperClassで意義したFooメソッドが呼ばれる spr.Foo (); sub.Foo ();
この結果、SuperClassで定義したものが呼ばれている。
class SuperClass { internal virtual int Foo() { // do something } }
class SubClass : SuperClass { internal override int Foo () { // do something } }
var spr = new SubClass () as SuperClass; var sub = new SubClass (); spr.Foo (); // SubClassで意義したFooメソッドが呼ばれる sub.Foo ();
この結果、SubClassで意義したFooメソッドが呼ばれる

- 作者: ハーバート・シルト,エディフィストラーニング株式会社矢嶋聡
- 出版社/メーカー: 翔泳社
- 発売日: 2010/12/03
- メディア: 大型本
- 購入: 5人 クリック: 55回
- この商品を含むブログ (6件) を見る