gpt4 book ai didi

c# - 我可以强制子类实现接口(interface)吗?

转载 作者:行者123 更新时间:2023-12-02 03:17:41 24 4
gpt4 key购买 nike

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

我想强制每个子类也使用基类实现此接口(interface)(即 IDeepCopyable<B>

如果我尝试离开 B的声明按原样但只是继承(“实现”是一个更准确的术语?)IDeepCopyable<T> ,如:

public abstract class B : IDeepCopyable<B>

然后,要在派生类中实现它(隐式或显式),编译器会给出错误消息“B 未实现接口(interface)成员 IDeepCopyable<B>.Clone() ”。

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

我可以以任何方式保留它吗?

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

提前致谢。

最佳答案

I can, of course, create an abstract method whose name is identical to the interface's method's name, but I find that ugly.

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

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

关于c# - 我可以强制子类实现接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59230435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com