2011-01-20 48 views

回答

4

base.x()应该在b类型内工作(但这不是你在这里的)。

在“方法隐藏”的情景(你有什么),这也很大程度上取决于什么样的变量是类型的,所以铸造a应该工作:

a tmp = _b; 
tmp.x = ... // talks to a.x, not b.x 

或更简洁:

((a)_b).x = ... // talks to a.x, not b.x 
0

除了类型转换(如上面,但如果你不知道它的母公司的类型,将无法正常工作),你不能,所以我会建议重新构建这些类之一。您可能应该使x虚拟,或者将b类中的属性x更改为不同的东西,或者在b的x实现中调用base.x。

+0

如果你*特别是需要*`a.x`,你知道类型...加上类型是坚硬的无论如何.... – 2011-01-20 06:19:46

2

使用类型转换:

public class c 
{ 
    a _a = new a(); 
    b _b = new b(); 

    void Test() { 
    int y = _b.x; // This is "x" of "b" 
    a _b_as_a = (a)_b; 
    int z = _b_as_a.x; // This is "x" of "a" of "b" 
    } 
} 
+0

它不能使用基地。如果我必须使用base关键字来调用,我如何构造我的类。我知道使用虚拟我可以得到我想要的,这个问题只是为了清除一些疑问 – 2011-01-20 06:16:11

相关问题