我有以下类层次结构
class A
{
public virtual string M()
{
return M(String.Empty);
}
public virtual string M(string s)
{
return M(s, false);
}
public virtual string M(string s, bool flag)
{
// Some base logic here
}
}
class B:A
{
public override string M(string s, bool flag)
{
string baseResult = base.M(s);
// Derived class logic here
}
}
类B可以用于两种情况:
1)
A b = new B();
string result = b.M();
2)
B b2 = new B();
string result2 = b2.M(someString, true);
这两种情况都会导致StackOverflowException崩溃。原因是在B.M(string s, bool flag)中调用的base.M(s),将再次调用B.M(string s, bool flag)。
有没有好的方法可以避免这种情况?
我知道,如果我调用base.M(s, flag),一切都会正常,但如果其他人开发派生类并访问base.M(s)呢?我不想在这里留下StackOverflowException的可能性。
解决方案
现在我的层次结构将如下所示
class A
{
public string M()
{
return M(String.Empty, false);
}
public virtual string M(string s, bool flag)
{
// Some base logic here
}
}
class B:A
{
public override string M(string s, bool flag)
{
string baseResult = base.M(s, flag);
// Derived class logic here
}
}