我正在嘗試解決以下面向對象問題。我知道它有點味道,但我必須適應現有的設計。請看下面的代碼片段:C# - 僅在子類中調用覆蓋方法
class Parent
{
public virtual Context GetContext()
{
return new Context(true);
}
public virtual GetData()
{
var context = GetContext();
var result = Query(context);
return result;
}
public string GetData2()
{
var context = GetContext();
var result = Query(context);
return result;
}
}
class Child : Parent
{
public override Context GetContext()
{
return new Context(false);
}
public override GetData()
{
var context = GetContext();
var result = Query(context);
}
}
我想以下結果:
new Parent().GetData() => would call Parent.GetContext();
new Parent().GetData2() => would call Parent.GetContext();
new Child().GetData() => would call Child.GetContext();
new Child().GetData2() (not overriden in Child) => would call Parent.GetContext();
的實際結果是:
new Parent().GetData() => calls Parent.GetContext();
new Parent().GetData2() => calls Parent.GetContext();
new Child().GetData() => calls Child.GetContext();
new Child().GetData2() => calls Child.GetContext();
你得到的結果是什麼,它與你想要的有什麼不同? – Servy
問題是......? – Gusman
這不正是默認行爲(不是'虛擬')已經做了什麼,或者我忽略了什麼? – hvd