2011-05-27 42 views
3

我有一個MustInherit類中有一些MustOveride方法。當我繼承該類時,我會自動獲取方法或屬性。創建mustoveride函數的代碼在它

我的問題是,我希望能夠繼承一個類,得到我的MustOveride函數和方法,但隨後已經包含一些代碼。我曾經見過一個.net類,做過它,當我從這個類繼承時,我得到了方法,並且有一些評論。

有人知道我的意思嗎? (這一點很難描述;-))

+0

你能否解釋有點請,你是什麼意思「了方法,在它的一些意見」 ? – abhilash 2011-05-27 10:52:56

回答

3

我認爲,你想要做的有以下幾種:
當您從抽象基類繼承,你想有一部分已經在你的類中實現這些抽象方法。
這是不可能的。它可以通過一些模板來實現,但這與C#或VB.NET無關,但與IDE一起使用。

您唯一能做的就是在基類中創建該方法爲virtual(C# - 我不知道它是如何在VB.NET中調用的)並在派生類中調用基類實現。

+0

是的,這是我想要做的事情。不幸的是,我期待這個anwser;),無論如何感謝 – Vincent 2011-05-27 11:04:17

9

我想,你所描述的被稱爲Template Method Pattern

public abstract class MyClass 
{ 
     public void SomeMethod() 
     { 
      // code 
      MustInherit(); 
      // code 
     } 

     protected abstract void MustInherit(); 
    } 

創建一個不會這個樣本和所有的東西普通代碼中被覆蓋SomeMethod的方法這個班。然後創建一個必須被覆蓋的抽象方法。

如果你想提供一個默認的實現,因此該方法不能被重寫,但可以使用virtual關鍵字。

public abstract class MyClass 
{ 
     public void SomeMethod() 
     { 
      // code 
      MustInherit(); 
      // code 
     } 

     protected virtual void CanInherit() 
     { 
      // default implementation 
     } 
    } 
0

一個抽象類爲您服務:) 如果你需要你的抽象類的消費ovverides肯定一些方法將其標記爲抽象了。如果你只需要提供給你方法的可能性,但這不是絕對必要的,那麼將它們標記爲虛擬。

+0

-1:'abstract'是VB.NET的'MustInherit'的C#等價物。 – 2011-05-27 10:56:59

0

隨着虛擬關鍵字你不會被強迫來實現繼承的方法,那麼它將使用基類的默認實現。這樣,你就繼承了所有的這個基本方法的代碼。

否則,你可以實現你自己的方法的衍生版本,在某個地方調用它方法的基礎類的版本:base.MethodName(...);。這允許你再次從基方法繼承全部代碼,但這次使用額外的代碼前後都是特定於您的派生類。

否則,你可以讓你的基類的方法使得它使用委託在其代碼在這裏和那裏調用它。因此,對於所有派生類,基類方法的基本功能保持不變,但每個派生類都提供其自己的代理來調整基類方法中的某些詳細密鑰塊代碼。

否則,如果你想看到的評論部分實現的方法在這裏和那裏一樣在這裏添加您的代碼,它通常由如Visual Studio中的外部工具或者其他IDE生成的代碼而已,對無關語言本身。

但是當你看到有很多的可能性,這取決於你想要精確...