2011-07-27 61 views
1

下面的代碼說a()不能覆蓋a(),因爲wee.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() 
    { 
    } 
} 
相關問題