2016-10-11 87 views
-1

我有一個很好的簡單問題,但似乎無法找到答案,我想知道它是否可能重寫實例類structore的方法看起來像這樣:從類的實例重寫方法

public class A : baseA  
{ 
    public virtual void methodA() 
    { 
    } 
} 

public class B : baseB  
{ 
    public void method B() 
    { 
     var ClassA = new A(); 
    } 

    /* Now Is there some sort of overide like */ 
    public override methodA() 
    { 
     //Do stuff 
    } 
} 

而這些類不會相互繼承,使其更加困難。 現在,如果這種結構可能在C#中?

+6

您不從'A'繼承,因此您如何期望重寫它? –

+0

這是可能的,您需要繼承A形式並保留返回類型,在這種情況下爲'void'。你有沒有在代碼中試過它? –

+0

如果你正在問的是什麼,你不能重寫'methodA()'作爲變量'ClassA'。 –

回答

4

不可以。如果您不從它繼承,則無法覆蓋類的行爲。

override修飾符需要擴展或修改抽象或虛擬實現的的繼承方法,屬性,索引或事件。

B必須繼承類A才能這樣做。

public class A 
{ 
    public virtual void methodA() 
    { 
    } 
} 

public class B : A 
{ 
    public void methodB() 
    { 
     var ClassA = new A(); 
    } 

    public override void methodA() 
    { 
     //Do stuff 
    } 
} 

檢查MSDN更多細節:

一種覆蓋方法提供了一種新的實現是從基類繼承的成員的。被覆蓋聲明覆蓋的方法稱爲重寫的基本方法。重寫的基本方法必須與覆蓋方法具有相同的簽名

+0

@Wojciech Szabowicz - 這是否回答你的問題?另外,如果你解釋你正在努力達到的目標,我們可以用不同的方式來幫助你。 –

+0

這些類別不會互相繼承,使它變得更加困難,所以基本上你寫的是真的,但不是在這個概念中,我儘管關於使用戰略模式。 –

+0

@WojciechSzabowicz - 如果不瞭解您面臨的實際問題,您無法給出任何反饋意見... –