让我们假设我们有以下类:
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;
}
答案 0 :(得分:4)
您尝试将“真实”功能放在虚拟成员中,让非虚拟成员以非虚拟方式公开它。那......真的不会起作用。也就是说,你需要做的就是扭转这个概念:
class A
{
public virtual int Number { get { return Foo(); } }
public int Foo()
{
return 1;
}
}
“真实”定义位于非虚拟成员中,虚拟成员只是调用它。这可以确保您只编写一次功能,同时仍然以虚拟和非虚拟庄园展示它。
答案 1 :(得分:1)
您可以使用" base"使用A类的方法和属性。
class B : A
{
public override int Number { get { return 2; } }
public new int Foo()
{
return base.Number;
}
}