来自 JS/Python 的 C# 新手...如何在 C# 中进行鸭式输入?

New to C# from JS/Python... How to do Duck Typing in C#?

我正在使用 C#(和 Unity 引擎)编写视频游戏。这是一款有很多枪支的游戏,这就是我计划如何构建它...

我有一个 Gun 基地 class。这会处理所有常见的事情,比如你每秒可以开多少枪,你有多少弹药,等等。

然后我有一堆一次性枪class继承自这个基地class。机枪可能会开几枪然后延迟,所以这就是subclass。火焰喷射器可能会点燃地面,所以这是一个 subclass...等等

然后,在我的代码库的另一端,我有一个操纵杆控制器。

我的计划是将一个枪支实例传递给我的操纵杆控制器。操纵杆说 "hey gun, fire this way." 枪会处理其他一切。

问题是,C# 是严格类型化的。那我该怎么办?我的枪非常不同,以至于它们 class 不同,所以我无法告诉我的操纵杆要为哪把枪分配内存。

我在这里错过了什么?在 JS 或 Python 中,我只是把枪传进去,语言不会关心类型是 subclass,因为它仍然有一个 "fire" 方法......想法?

谢谢!

在 C# 和许多其他语言中,您 implement an interface or create a subclass

What am I missing here? In JS or Python I'd just pass the gun in, and the language wouldn't care that the type is a subclass, because it still has a "fire" method... Thoughts?

基础 class 应该有它自己的被子 class 重写的虚火方法,或者它应该定义一个抽象方法(强制任何子 class来实现它)。或者,您可以创建一个接口,然后您的控制器 class 可以使用任何实现该接口的 class。