通过获取参数的超类来实现接口

时间:2014-05-11 15:10:12

标签: c# inheritance interface

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

阻止这种情况得到支持的问题是什么?子类(InterfaceD)不应该能够接受超类(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不存在,我尝试使用InterfaceC

实施MethodA(ClassA)

1 个答案:

答案 0 :(得分:2)

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

最好的方法是不从InterfaceD派生InterfaceC并让ImplementingClass实现所需的接口。没有看到一个具体的例子很难评论,但它基本上归结为你的界面设计。