如何从类b的对象调用类a的x而不将类a的x标记为虚拟。 是否可能
public class a { public int x { get; set; } }
public class b : a { public int x { get; set; } }
public class c {
a _a = new a();
b _b = new b();
public c()
{
int y=_a.x;
y=_b.x;
_b.x = y;
}
}
答案 0 :(得分: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
答案 1 :(得分: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"
}
}
答案 2 :(得分:0)
除了类型转换(如上所述,虽然如果你不知道它的父类的类型就行不通)你不能,所以我建议重新构造其中一个类。您应该将x虚拟化,或将类b中的属性x更改为不同的属性,或者在b的x实现中调用base.x。