请采取掠夺我的代码:如何在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'继承的东西,就必须实现它。 –