Sha*_*awn 4 c# methods casting
我有以下类层次结构:
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类,我甚至没有工作必须投它在所有,它只是跑更新的正确版本,所以我一定是无意中改变了一些东西.
Mar*_*ers 18
(Boss)(ai.Update(frameTime));
Run Code Online (Sandbox Code Playgroud)
你需要添加一对额外的括号来获得你想要的东西:
((Boss)ai).Update(frameTime);
Run Code Online (Sandbox Code Playgroud)
但是,由于您的方法是虚拟的,因此不必执行此转换.
您可能还需要考虑将AI类型更改为abstract class或(如果可能)接口.
| 归档时间: |
|
| 查看次数: |
3135 次 |
| 最近记录: |