gpt4 book ai didi

c# - 通过参数的父类(super class)实现接口(interface)

转载 作者:行者123 更新时间:2023-11-30 16:59:36 25 4
gpt4 key购买 nike

为什么此代码 (ImplementingClass) 无效?

阻止此支持的问题是什么?子类 (InterfaceD) 不应该比父类(super class) (InterfaceC) 吸收更多信息,并使用相同的方法吗?当 InterfaceD 类型的东西用作 InterfaceC 类型时,所有输入都将得到很好的处理。但是 InterfaceD 也可以处理其他场景(ClassA 的对象),而不仅仅是某些场景(ClassB)。

我知道我可以在 ImplementingClass 上实现这两个方法并传递对 InterfaceD 方法的调用,但为什么编译器要求这样做?

public class ClassA 
{
// ...
}

public class ClassB : ClassA
{
// ...
}

public interface InterfaceC
{
void MethodA(ClassB)
}

public interface InterfaceD : InterfaceC
{
void MethodA(ClassA);
}

public class ImplementingClass : InterfaceD {
void MethodA(ClassA)
{
// ...
}
// refuse to implement MethodA(ClassB) ...
}

编辑:一个更简单的例子可能是如果 InterfaceD 不存在,我试图用 MethodA(ClassA) 实现 InterfaceC

最佳答案

你必须实现 MethodA(ClassB) 因为 InterfaceD 继承自 InterfaceC 因此 InterfaceD 现在有 MethodA(ClassB)MethodA(ClassA) 就像您可以通过 ClassB 的实例访问 ClassA 的方法一样。

最好的方法是不要从 InterfaceC 派生 InterfaceD 并让 ImplementingClass 实现它需要的接口(interface)。在没有看到具体示例的情况下很难发表评论,但基本上可以归结为您的界面设计。

关于c# - 通过参数的父类(super class)实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23594257/

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