C# 使用基类方法返回值?
我的基类中有一个返回bool的方法,我希望该bool确定在我的派生类中相同的重写方法会发生什么 基数: 衍生C# 使用基类方法返回值?,c#,inheritance,methods,C#,Inheritance,Methods,我的基类中有一个返回bool的方法,我希望该bool确定在我的派生类中相同的重写方法会发生什么 基数: 衍生 public override void Debt(double bal) { // if worked is true do something } 请注意,bal来自我前面创建的构造函数您可以使用base关键字调用基类方法: public override void Debt(double bal) { if(base.Debt(bal))
public override void Debt(double bal)
{
// if worked is true do something
}
请注意,bal来自我前面创建的构造函数您可以使用
base
关键字调用基类方法:
public override void Debt(double bal)
{
if(base.Debt(bal))
DoSomething();
}
如上面的注释所示,您需要确保基类中存在具有相同签名(返回类型和参数)的虚拟方法,或者从派生类中删除override关键字
if(base.Debt(bal)){
// do A
}else{
// do B
}
base
指的是基类。因此base.X
指基类中的X
。调用base
方法:
public override void Debt(double bal)
{
var worked = base.Debt(bal);
//Do your stuff
}
正如其他几个人提到的,您可以使用
base.Debt(bal)
调用基类方法。我还注意到您的基类方法没有声明为virtual。默认情况下,C#方法不是虚拟的,因此除非在基类中将其指定为虚拟,否则不会在派生类中重写它
//Base Class
class Foo
{
public virtual bool DoSomething()
{
return true;
}
}
// Derived Class
class Bar : Foo
{
public override bool DoSomething()
{
if (base.DoSomething())
{
// base.DoSomething() returned true
}
else
{
// base.DoSomething() returned false
}
}
}
msdn对虚拟方法的说明确保您的基类方法是虚拟的:
公共虚拟bool Deb(双bal)
,否则您的派生类会将其隐藏。只是一个旁注。返回值类型也必须匹配,否则会出现编译器错误,。
。最好将if
后的区域括起来,然后在那里执行操作,而不是调用其他方法。为什么要让调用堆栈比必须的更深?@Jeff-我把方法调用放在那里纯粹是为了表明应该在那里发生一些事情。它也可能是内联语句。我明白你的意思,只是无法判断结果是真是假false@TheAce:它位于if
语句中。if
计算基类方法的返回值。如果你陷入了“如果”的检查,那是真的。否则,这是错误的。
//Base Class
class Foo
{
public virtual bool DoSomething()
{
return true;
}
}
// Derived Class
class Bar : Foo
{
public override bool DoSomething()
{
if (base.DoSomething())
{
// base.DoSomething() returned true
}
else
{
// base.DoSomething() returned false
}
}
}