我可以强制子类实现接口吗?

Cha*_*man 6 c#

我有一个基类,比如 named B。我有两个派生类,D1D2.

好像:

public abstract class B
{
    public abstract void DoSomething();
}

public class D1 : B
{
    public override void DoSomething() { ... }
}

public class D2 : B
{
    public override void DoSomething() { ... }
}
Run Code Online (Sandbox Code Playgroud)

现在,我创建了一个新界面IDeepCopyable<T>,它有一个方法Clone()

public interface IDeepCopyable<T>
{
    T Clone();
}
Run Code Online (Sandbox Code Playgroud)

我想强制每个子类也使用基类(即IDeepCopyable<B>.

如果我尝试将B's 声明保持原样,但只是继承自 ('implement' 是一个更准确的术语?) IDeepCopyable<T>,例如:

public abstract class B : IDeepCopyable<B>
Run Code Online (Sandbox Code Playgroud)

然后在派生类中实现它(隐式或显式),编译器给我一条错误消息“B没有实现接口成员IDeepCopyable<B>.Clone()”。

当然,我可以创建一个抽象方法,其名称与接口的方法名称相同,但我觉得这很难看。为什么要重新声明方法?

无论如何,我可以随心所欲吗?

我看到 VS2019 有一个选项“抽象地实现接口”,所以我认为答案是否定的,但是 A)我想确定。B)如果是这样,这种行为背后是否有设计概念,或者它只是 C# 设计中的一个错误?

提前致谢。

khl*_*hlr 4

当然,我可以创建一个名称与接口方法名称相同的抽象方法,但我发现这很难看。

这就是要走的路。您的基类实现该接口。因此它必须履行它。它可以通过具体实现该方法(这里不需要)来做到这一点,或者基类可以通过抽象声明该方法来强制其继承者这样做。

你说这很丑,我认为这太露骨了。无论如何,没有办法解决这个问题;-)