2011-11-11 9 views
0
class base_c 
{ 
    public virtual void a() {} 
    public virtual void b() {} 
    public virtual void c() {} 
    public virtual void d() {} 
} 

class other_c : base_c 
{ 
    public void a() {} 
    public new void b() {} 
    public override void c() {} 
    public override void d() {base.d();} 
} 

class Program 
{ 
    static void Main() 
    { 
     base_c game2 = new other_c(); 
     game2.a(); 
     game2.b(); 
     game2.c(); 
     game2.d(); 
    } 
} 

'd'は、より一般的なbase_c関数とより具体的なother_cが発生するという望ましい振る舞いをしていますが、順序が逆であればいいと思います。これを実際に確認するには、デバッガを使用してプログラムを実行します。c#継承一般的なもの

この結果を得るには 'd'が最適ですか?

"base_c game2 = ..."はbase_cのままでなければならず、other_cに変更することはできません。

答えて

6

はい、子クラスがメソッドDで継承した振る舞いを拡張することを意図している場合、そのパターンは、子のオーバーライドdでbase.d()を呼び出すことです。

継承された動作(拡張ではない)を置き換えることを目的としている場合は、基本メソッドを呼び出すことはありません。

オーバーライドメソッドで何かを実行する前に、基本メソッドを最初に呼び出すか、オーバーライドメソッドでコードの途中または後にベースを呼び出すかを選択できます。

これらはすべて、適切な状況で有効な手法です。

+0

ty:¬)すばらしい簡潔でわかりやすい解答。 – alan2here

関連する問題