【发布时间】:2015-03-30 03:06:37
【问题描述】:
假设我们有以下类:
class A {
public virtual int Number { get { return 1; } }
public int Foo(){
return Number;
}
}
class B : A{
public override int Number { get { return 2; } }
}
正如预期的那样,如果我在 B 类的实例上调用 Foo 方法,我将得到 2。是否可以更改 Foo 方法以使其始终使用基 A.Number财产(并返回 1)?类似的东西:
public int Foo(){
return A.Number;
}
【问题讨论】:
-
注意:这个问题不是如何调用基础方法(例如,如果它与当前方法同名),而是如何防止多态调度虚拟会员。
-
你是对的。我可以吗?
-
“也许”,虽然可能并不像预想的那样 - 因为它打破了运行时多态性背后的概念(重要的是 actual 对象,而不是表达式类型)。你可以做
class B : A { public new int Number { get { return 2; } }。在这种情况下,b是表达式键入为B,b.Number将返回 2,但((A)b).Number(和b.Foo())将返回 1(不是 2)。请注意这对A b2 = b; b2...的影响。
标签: c# overriding