[英]Can I Enforce a Subclass to Implement an Interface?
我有一个基类,比如名为B
。 我有两个派生类, D1
和D2
。
好像:
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.