我有以下类层次结构
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
}
}
Run Code Online (Sandbox Code Playgroud)
B类可用于两种情况:
1)
A b = new B();
string result = b.M();
Run Code Online (Sandbox Code Playgroud)
2)
B b2 = new B();
string result2 = b2.M(someString, true);
Run Code Online (Sandbox Code Playgroud)
这两种情况都会因StackOverflowException而崩溃.这是因为在BM内部调用的base.M(字符串s,bool标志)将再次调用BM(字符串s,bool标志).
有什么好方法可以避免这种情况吗?
我明白,如果我调用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
}
}
Run Code Online (Sandbox Code Playgroud)