C#:用于启用实现和覆盖的接口(interface)和抽象

标签 c# interface overriding implementation abstract

我必须设计大约 5 个不同的类。

这些类的很多部分都非常相似,但它们会有细微的差异(当然)。

如果我编写一个interface,让我设计的每个类都实现,那么interface 中的每个abstract 方法都必须完整地编写。

如果我编写一个 base 类,我的每个设计类都派生自该类,那么每个类将自动在我在 base 类,但它们都需要被覆盖,调用 base 功能,以包含细微的差异。

有没有办法结合这些功能?我喜欢要求实现接口(interface)的方法,但我也喜欢设置由base 类预编程的功能。

我在这里和其他地方看过很多例子,但看起来没有人按照我描述的去做。有可能吗?

编辑:因此,鉴于此:

abstract class Base
{
    virtual protected void OptionallyOverridable() {}
    abstract protected void SubclassMustImplement();
}

...有没有办法写出这样的东西:

abstract class Base2
{
    DataEventType EventType;
    DataChangedEventHandler OnDataChange;

    virtual protected void OptionallyOverridable() {}
    abstract protected void SubclassMustImplement() {
      // values here are guaranteed
    }
}

最佳答案

C# 允许一个类既可以继承基类又可以实现接口(interface),那么为什么不两者兼顾呢?

public interface IFoo
{
    public void Bar();
    public bool Baz();
}

public abstract class BaseFoo : IFoo
{
    //fields/properties used in all classes
    public void Bar()
    { //Implementation }

    public bool Baz()
    { //Implementation }
}

public class DerivedFoo : BaseFoo, IFoo {...}

关于C#:用于启用实现和覆盖的接口(interface)和抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6064047/

相关文章:

c# - 将 REST 响应转换为 XDocument 时出现问题

.net - 如何*正确*使用 WCF 的接口(interface)类型?

java - 有人可以阐明 Java(6) 中的协变返回类型吗?

Java - 强制继承 N 个重写抽象方法中的 1 个

c# - GameTime.ElapsedGameTime 没有改变

c# - C#泛型的属性限制

c# - 为什么仅在实现接口(interface)后才重写方法?

java - Lambda 不会覆盖单独文件中的接口(interface)方法

Java:覆盖非继承类的方法

c# - 使用 Expression<Func<T>> 使值类型表现为引用类型