我有以下类层次结构:
public class AI {
public AI() { }
public virtual void Update(float frameTime) { }
}
public class Boss : AI {
public Boss() : base() { }
public override void Update(float frameTime) {
Console.WriteLine("Boss Update");
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个包含AI变量的Character,然后我将Boss实例存储在其中并尝试将其转换为Boss的Update函数而不是基类.
AI ai = new Boss();
(Boss)ai.Update(0f);
Run Code Online (Sandbox Code Playgroud)
这不起作用,在C#中执行此操作的正确方法是什么?它是正确的另一个AI类,我甚至没有工作必须投它在所有,它只是跑更新的正确版本,所以我一定是无意中改变了一些东西.
我检查了MSDN和其他几个网站,但我仍然不确定我得到了答案.如果你有一个带有虚函数Init()的Parent类,那么我可以 - 在派生类中 - 有一个覆盖函数Init(int num),或者你只需要为你创建的每个派生类创建一个新函数?如果我没有错,后者会导致你在Child类中有2个Init函数,对吧?这就是我的意思:
public class Parent {
protected int a;
public Parent() {
a=1;
}
public virtual void Init() {
}
}
public class Child : Parent {
public Child() {
}
//is this allowed?
public override void Init(int multiplier) {
}
//or do i have to do this and have 2 Init functions?
public void Init(int multiplier) {
}
}
Run Code Online (Sandbox Code Playgroud)