考慮以下代碼示例:有沒有辦法指定範圍?
public abstract class Parent
{
public int val;
public Parent()
{
val = 0;
}
public virtual void foo()
{
inc();
}
public virtual void inc()
{
val = val + 10;
}
}
public class Child : Parent
{
public override void foo()
{
base.foo();
}
public override void inc()
{
val++;
}
}
static void Main(string[] args)
{
Parent p = new Child();
Console.WriteLine("p.val = " + p.val); //Output: p.val = 0
p.foo();
Console.WriteLine("P.val = " + p.val); //Output: p.val = 1
}
我假設父類的inc()
沒有得到調用,因爲{this}
指針實際上指向一個子對象,這樣對孩子的的inc()
版本將會從父對象的調用功能foo()
。有沒有辦法強制父函數foo()
總是調用父函數inc()
就像你可以在C++中使用::
運算符?
如果Parent.inc()未聲明爲「虛擬」會怎麼樣? – niaher 2012-02-22 12:05:06
這不是破壞了多態foo()的全部觀點嗎?即使你做了Parent :: foo(){this.inc()},它仍然會調用Child :: foo – StuartLC 2012-02-22 12:05:40
我很肯定你可以用反射來完成它。當然,'base'關鍵字不支持C++的'::'支持的所有東西。 – CodesInChaos 2012-02-22 12:08:18