2011-05-27 56 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生成的代码而已,对无关语言本身。

但是当你看到有很多的可能性,这取决于你想要精确...