C# 使派生类中需要基方法

C# 使派生类中需要基方法,c#,C#,我正在构建一些类,我在基类中有一个方法,该方法需要包含在该方法的派生类实现中 我该怎么做 例如: 制定方法 在派生类中,需要使用override public override void Method(derive val){ 如果要在基类中创建默认实现,可以将方法标记为virtual,而不是abstract,但是不能要求派生类实现该方法 制定方法 在派生类中,需要使用override public override void Method(derive val){ 如果要在基类中创建默认实

我正在构建一些类,我在基类中有一个方法,该方法需要包含在该方法的派生类实现中

我该怎么做

例如: 制定方法

在派生类中,需要使用
override

public override void Method(derive val){
如果要在基类中创建默认实现,可以将方法标记为
virtual
,而不是
abstract
,但是不能要求派生类实现该方法

制定方法

在派生类中,需要使用
override

public override void Method(derive val){

如果要在基类中创建默认实现,可以将方法标记为
virtual
,而不是
abstract
,但是不能要求派生类实现该方法

由于您希望在基类中实现实际功能并在派生类中扩展该功能,我建议在基类中使用一个可调用的公共方法,该方法反过来调用在派生类中实现的抽象方法:

public abstract class BaseClass
{
  public BaseClass(){}

  public void Method(int val)
  {
      //base class logic here
      //now call DoSomething implementation
      DoSomething(val);
      //some other base class logic here
  }

  protected abstract void DoSomething(int val);
}

public class Derived : BaseClass
{
    protected override void DoSomething(int val)
    {
       //other logic
    }
}

此模式称为虚拟接口或非虚拟接口(NVI)模式

由于您希望在基类中实现实际功能并在派生类中扩展该功能,我建议在基类中使用一个可调用的公共方法,该方法反过来调用在派生类中实现的抽象方法:

public abstract class BaseClass
{
  public BaseClass(){}

  public void Method(int val)
  {
      //base class logic here
      //now call DoSomething implementation
      DoSomething(val);
      //some other base class logic here
  }

  protected abstract void DoSomething(int val);
}

public class Derived : BaseClass
{
    protected override void DoSomething(int val)
    {
       //other logic
    }
}


此模式称为虚拟接口或非虚拟接口(NVI)模式

至少.NET3.5不允许在非抽象类中使用抽象方法。尝试了这个方法,但问题也在于基类有自己的属性,这些属性被分配给派生类。因此,需要让基类有完整的实现,派生类在自己实现之前调用基类方法。我对csharp arena比较陌生……我知道在VB中,如果我有一个派生方法,它会自动加载mybase.method()在方法中实现,并要求在派生类中包含基方法,以使其有效,在csharp中是否有类似的方法?请注意.net 3.5至少不允许在非抽象类中使用抽象方法。尝试了这个方法,但问题也在于基类有自己的属性,这些属性被分配给派生类。因此,需要让基类有完整的实现,派生类在自己实现之前调用基类方法。我对csharp arena比较陌生……我知道在VB中,如果我有一个派生方法,它会自动加载mybase.method()在方法中实现,并要求在派生类中包含基方法,以使其有效,在csharp中有类似的方法吗?我的理解是,您不能从抽象类派生…所以我应该使用“模板”创建一个抽象类吗然后从抽象中创建一个可实例化的类,然后从基类和抽象中派生?你不能实例化一个抽象类,但你当然可以从它派生(否则它将毫无用处)。@GoldBishop:你的理解是错误的。抽象类的全部要点是从抽象类派生,并提供任何抽象成员的实现。这就是我需要理解的……MSDN缺乏(毫不奇怪)所有其他源都镜像MSDN。@BrokenGlass:查看执行
公共抽象类ABase
然后
公共类基:ABase
以及最终的
公共类派生:基,ABase
,如果需要,首选:
公共类派生:基
我的理解是,你不能从抽象类派生……那么我应该用“模板”创建一个抽象类,然后从抽象创建一个可实例化的类,然后从基和抽象派生吗?你不能实例化一个抽象类,但是你当然可以从中获得(否则就没用了)。@戈德比肖普:你的理解是错误的。抽象类的全部要点是从抽象类派生,并提供任何抽象成员的实现。这就是我需要理解的……MSDN缺乏(毫不奇怪)所有其他来源都是MSDN的镜像。@BrokenGlass:doing
public abstract class ABase
然后
public class Base:ABase
最终的
public class-derivate:Base,ABase
如果需要,首选:
public class-derivate:Base
看起来您已经回答了自己的问题。要包含方法的基类实现,只需从派生方法内部调用
base.method(val)
。还缺少什么?更多的是确保正在调用基方法。现在我有将近10-15个类,它们有各种各样的继承链。如果基本方法调用已经被调用,或者在我执行继承时需要生成方法的模板签名,那么这将是一种更精确、更方便的方法。10-15将很快跳到50左右……因此,使用最少的按键次数……仅供参考,参数的值类型是它所包含的类的名称。这就产生了第二个问题,即在没有接口的情况下自动键入方法的数据;)已经有了一个接口,它是用泛型设计的……只是每个类都有一个基类继承和接口。希望每个新类只继承一个继承并获得功能。看来你已经回答了自己的问题。要包含方法的基类实现,只需从派生方法内部调用
base.method(val)
。还缺少什么?更多的是确保正在调用基方法。现在我有将近10-15个类,它们有各种各样的继承链。如果基本方法调用将alr