C# 总是从基础 class 调用基础方法
C# always call a base method from the base class
假设我们有以下 classes:
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 class 的实例上调用 Foo 方法,我将得到 2。是否可以更改 Foo 方法,使其始终使用基数 A.Number 属性(和 return 1)?类似于:
public int Foo(){
return A.Number;
}
您正在尝试将 "real" 功能放入虚拟成员中,并让非虚拟成员以非虚拟方式公开它。那是……真的行不通。也就是说,您需要做的就是颠倒这个概念:
class A
{
public virtual int Number { get { return Foo(); } }
public int Foo()
{
return 1;
}
}
"real"定义在非虚拟成员中,虚拟成员简单调用即可。这确保您只需编写一次功能,同时仍将其暴露在虚拟和非虚拟庄园中。
您可以使用 "base" 来使用 class A 的方法和属性。
class B : A
{
public override int Number { get { return 2; } }
public new int Foo()
{
return base.Number;
}
}
假设我们有以下 classes:
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 class 的实例上调用 Foo 方法,我将得到 2。是否可以更改 Foo 方法,使其始终使用基数 A.Number 属性(和 return 1)?类似于:
public int Foo(){
return A.Number;
}
您正在尝试将 "real" 功能放入虚拟成员中,并让非虚拟成员以非虚拟方式公开它。那是……真的行不通。也就是说,您需要做的就是颠倒这个概念:
class A
{
public virtual int Number { get { return Foo(); } }
public int Foo()
{
return 1;
}
}
"real"定义在非虚拟成员中,虚拟成员简单调用即可。这确保您只需编写一次功能,同时仍将其暴露在虚拟和非虚拟庄园中。
您可以使用 "base" 来使用 class A 的方法和属性。
class B : A
{
public override int Number { get { return 2; } }
public new int Foo()
{
return base.Number;
}
}