繁体   English   中英

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

[英]Can I Enforce a Subclass to Implement an Interface?

我有一个基类,比如名为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() { ... }
}

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

public interface IDeepCopyable<T>
{
    T Clone();
}

我想强制每个子类也用基类(即IDeepCopyable<B>实现这个接口。

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

public abstract class B : IDeepCopyable<B>

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

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

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

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

提前致谢。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM