請採取掠奪我的代碼:如何在C#中使用自動後期綁定?
public class TweenerBase {
public void Update() {}
}
public class Vector3Tweener : TweenerBase {
public void Update() { ... }
}
public class ColorTweener : TweenerBase {
public void Update() { ... }
}
在一些其他類我稱之爲:
private List <TweenerBase> tweens;
tweens = new List <TweenerBase>();
ColorTweener tween1 = new ColorTweener();
Vector3Tweener tween2 = new Vector3Tweener();
tweens.Add(tween1);
tweens.Add(tween2);
的問題出現時,我呼籲:
tweens[ 0 ].Update();
它調用:TweenerBase。更新()不是我所期望的ColorTweener.Update()。我可以用這樣的修正:
if (tweens[ 0 ].type == "ColorTween") ((ColorTween) tweens[ 0 ]).Update();
但它是非常不方便的解決方案,如果我使用類似:
((ColorTween) tweens[ 0 ]).Update();
float value = ((ColorTween) tweens[ 0 ]).GetCurrentValue();
((ColorTween) tweens[ 0 ]).SomeAnotherVoid();
((ColorTween) tweens[ 0 ]).SomeAnotherVoid2();
它看起來令人難以置信的:)有沒有一種方法,使後期綁定調用只是:
tweens[ 0 ].Update();
它會自動調用ColorTweener.Update()?
在Java中,方法是'默認virtual'(而且也沒有關鍵字的話)。如果你想在C#中實現同樣的事情,你需要在'TweenerBase'的聲明中加入'virtual'(正如其他人所說的那樣)。 在這種情況下,它看起來像你的抽象類只有一個空方法。如果你使用'interface',而不是從TweenerBase'繼承的東西,就必須實現它。 –