在C类时访问同名成员:A:B

时间:2014-03-09 19:34:54

标签: c# c#-4.0 inheritance

我试图设计一个框架,其中一个类将继承另外两个类,这是一个错误的错误;忘记了C#没有多重继承。由于这个错误,我做了一个解决方法。

  

答:B
  两者:A //现在拥有A和B的所有成员,除非它们被隐藏

如果A和B都有一个同名的成员,我可以在不更改框架的情况下访问B的成员(由A隐藏),如果是,那么如何?

编辑:A类和B类不是要实例化的。

2 个答案:

答案 0 :(得分:6)

您可以采取的一种方法是将方法提取到一对接口中,并在A,B类中使用显式接口实现。

interface IA {
    void Method();
}

interface IB {
    void Method();
}

abstract class B : IB {
    void IB.Method() { ... }
}

abstract class A : B, IA {
    void IA.Method() { ... }
}

class Both : A { ... }

然后必须转换为接口以访问方法,并且尝试在没有强制转换的情况下调用Method会导致编译时错误。

Both x = new Both();
((IA)x).Method();
((IB)x).Method();

x.Method() //invalid call

答案 1 :(得分:2)

C c = new C();
c.Member("This is C's version, if there is one; otherwise it's A's");
((A)c).Member("This is A's version");
((B)c).Member("This is B's version");