2011-11-09 186 views
1

我有抽象類抽象類和方法

Public class Abstract baseClass 
{ 
    public abstract string GetString(); 
    public abstract string GetString1(); 
} 

public class DerivedClass : baseClass 
{ 
     public override string GetString() 
     { 
      return "test data"; 
     } 

    public override string GetString1() 
    { 
     throw new NotImplementedException(); 
    } 
} 

在代碼上面的行,我必須同時實現在派生類抽象方法。但由於某種原因,我不想實現所有方法,只是其中一個像GetString()而已。如何做呢?

感謝

+1

爲什麼?很明顯,derivedClass繼承了'baseClass'的所有特性,所以它應該實現'baseClass'中的所有features_。將'baseClass'分成兩類 – Raynos

回答

1

如果DerivedClass將爲其他類提供通用功能,可以將其標記爲抽象,實現此處的一種方法,然後繼承者只需實現其餘的方法。

如果你不打算支持在給定實現的另一種方法,你還是要公開方法在你的類,但類似於你這裏有什麼,你通常會拋出一個NotSupportedException。對於void方法,您可以簡單地返回(不執行任何操作)。最後,如果你想分離出既有方法又有隻有一個的方法,那麼你可以使用接口。

public interface IBase 
{ 
    string GetString(); 
} 

public interface IBasePlus : IBase 
{ 
    string GetStringPlus(); 
} 

你可以有一個實現IBasePlus一個類,但您能提供此項到採取IBase類型的參數,在這種情況下,你將看不到多餘的方法的方法。

+0

感謝恢復傑伊,,,我得到你的觀點。實際上我只是想弄清楚OOP上是否有任何關鍵字或任何默認功能。在派生類中實現虛擬方法並不是必須的。用同樣的方法,我們可以用抽象方法做這樣的事嗎? –

+1

@Amit通過聲明一個成員'virtual',可以在抽象類中擁有默認的功能,而且這個默認功能可能什麼都不做。然後你只需要在派生類中重寫&實現它;這不是必需的。 – Jay

+0

絕對的,這是正確的方法,再次感謝... –

0

以抽象的關鍵字關閉其他方法,並提供在基類中的默認實現

+0

,但由於某些場景的原因,我只能在基類中提供簽名。 –

1

一般來說,如果你沒有實現所有的抽象方法,然後你的新類也是一個抽象類。要獲得具體的課程,您需要實施所有的方法。如果您只想要/需要實現方法的子集,請考慮使用多個接口(一個接口與GetString,另一個接口與GetString1),而不是抽象類。然後你可以用你想在課堂中使用的方法來實現接口。

+0

謝謝你回覆託德。我喜歡你的想法 –

+0

加1爲多個接口。請考慮[Java Collections如何處理不支持的(或未實現的)方法](http://c2.com/cgi/wiki?UnsupportedOperationException)。 – Fuhrmanator