我已經類層次如何在C#中調用基重載的方法?
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),一切都會起作用,但如果其他人開發一個dervived類並訪問base.M(s)呢?我不喜歡在這裏留下StackOverflowException的可能性。
SOLUTION
現在我的層次看起來像
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#中的這一章,標題爲避免重載基類中定義的方法http://www.informit.com/articles/article.aspx?p=1570631 – 2011-01-29 09:04:29
哦,我明白了。我想我應該在這裏擺脫不必要的複雜性。 – Aides 2011-01-31 08:22:44