2011-07-27 6 views
1

以下のコードは、wee.a()が仮想、抽象、または上書きされていないため、a()がa()を上書きできないことを示しています。これを回避する方法はありますか?私はスーパーメソッドの中にコードを持っている必要がありますが、それをオーバーライドしたい!C#このようにオーバーライドする方法は?

public abstract class wee 
{ 
    public void a() 
    { 

    } 
} 
public class dee : wee 
{ 
    public override void a() 
    { 
    } 
    public void b() 
    { 
    } 
} 
+4

バーチャルにする?あなたがそれをすることができない理由はありますか? – kprobst

+0

元のコードに仮想を追加できない理由はありますか? – GvS

+0

はい、それはバーチャルのように見えますが、私はバーチャルが存在していることを認識していませんでした。みなさんありがとうございます:D !, – Baconbeastnz

答えて

9

wee.aにはvirtual or abstractとする必要があります。仮想

public abstract class wee 
{ 
    public virtual void a() 
    { 

    } 
} 

public class dee : wee 
{ 
    public override void a() 
    { 
    } 
    public void b() 
    { 
    } 
} 

要約:

public abstract class wee 
{ 
    public abstract void a(); 
} 

public class dee : wee 
{ 
    public override void a() 
    { 
    } 
    public void b() 
    { 
    } 
} 
1

マークwee.a()virtualとして - それはあなたが基本実装を提供することができますが、必要であれば、サブクラスでその動作をオーバーライドするためのオプションを提供します。

// wee 
public virtual void a() { // do stuff for base implementation } 

// dee 
public override void a() { // override behavior implemenation } 
2

はそうではありませんオーバーライド方法、などの基本をマークせずにこれを行う方法はありませんでしょう。他の人が示唆しているようにベースを変更したくない場合は、代わりに次のようにベースメソッドを隠すことができます:

public class dee : wee 
{ 
    public new void a() 
    { 
    } 
    public void b() 
    { 
    } 
}