【发布时间】:2016-08-25 16:51:31
【问题描述】:
我有以下类层次结构
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
}
}
【问题讨论】:
标签: c#