接口和基类混合,正确的实现方式

Gre*_*ead 2 c# inheritance interface base-class

我有一些用户控件,我想指定属性和方法.

它们继承自基类,因为它们都具有诸如"Foo"和"Bar"之类的属性,并且我使用基类的原因是我不必在每个派生类中手动实现所有这些属性.

但是,我希望有一个方法只在派生类中,而不是在基类中,因为基类不知道如何"执行"该方法,所以我想为此使用一个接口.如果我把它放在基类中,我必须定义一些body来返回一个值(这将是无效的),并始终确保重写方法不调用基类.方法

是否正确的方法是使用基类和接口来公开方法?它似乎非常圆润,但我认为这样做的每一种方式似乎都是错误的......

让我知道如果问题不清楚,这可能是一个愚蠢的问题,但我想这样做.

编辑:感谢所有人提供了优秀的抽象建议,但这打破了设计师.如果抽象不是一个可选择的选项,你会怎么做?

Jus*_*ier 5

或者,您可以在基类中将方法定义为"抽象",这不需要类实现它.例如:

abstract class A
{
   public abstract void B();
}
Run Code Online (Sandbox Code Playgroud)

当然这会强制你的基类也是抽象的,但听起来这对你来说效果很好.

请参阅MSDN上的抽象方法.

更新

由于abstract设计器问题,由于不是您的选项,您可以将方法定义为基类的一部分,如果直接从基类调用它,则抛出NotImplementedException:

void DerivMethod()
{
    // Must be implemented by derived class
    throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)

否则,使用一个interface会很好,特别是如果上面的味道在你的口中留下了不好的味道......