我想在 C# 中创建一个代码结构,让我继承一个类或接口(interface),但让你“选择加入”继承类的方法。
Unity 的 MonoBehaviour 的工作原理是我想要的一个完美示例。您只需为需要的内容编写代码,这很简单 - 无需从基类编写方法,您只需留空即可。
使用Unity的例子:
public class MyUpdater : MonoBehaviour
{
int num = 0;
void Update()
{
num++;
}
}
MonoBehaviour 类还包含其他选择加入方法(Start、OnDestroy 等),但编译器不会关心。
显然,Unity 在 MonoBehaviour 内部进行了大量工作,我不打算重新创建它。 (事实上我在统一工作)
我喜欢代码结构,而且我还以自由职业者的身份与可能不太擅长编码的人一起工作。无需使用覆盖或 exc 可以更轻松地理解和扩展我创建的内容。
感谢您花时间阅读! :)
编辑:
澄清一下,我对 Unity 或编码并不陌生,但我是自学成才的。我主要从事创建后端系统的工作。
正如下面有人建议的那样,我问的是如何为不从 MonoBehaviour 扩展的类复制 Unity 的“魔术”方法。
最佳答案
回答 3,如果出于某种原因您对 Unity 的“魔术”功能在 Unity 中发挥作用的机制感兴趣(在当前版本中 - 它发生了很大变化)
一定要用谷歌搜索关于这个的大量讨论,例如:
How do the Unity private awake update and start methods work?
很无趣,不影响什么。
您可能喜欢这个类似的冗长 QA,它触及了该问题的核心:
In Unity, how does Unity magically call all "Interfaces"?
很可能您只是在寻找 c# 中的New
和Override
关键字。
(每种语言的继承语法/范例都略有不同。)
Override
扩展基类中的函数,New
隐藏它。选择权在你:)
它被广泛解释,例如
(如果您从字面上询问 Unity 的“魔法”函数(Update()
等)的不寻常范例,那是不可能的,而且您也不想这样做。 )
您可能会问另一件事:
新的 Unity 开发者没有意识到这一点是很常见的:
正如您所说,Unity 为您提供 MonoBehavior
。
新的 Unity 程序员通常没有意识到您通常使用MonoBehavior
class Weapon: MonoBehavior {
... explosions
... sound effects
... etc
}
然后您和其他程序员基于该类编写类:
class Slingshot: Weapon {
class Peashooter: Weapon {
class SplatRoller: Weapon {
请注意,这些新类确实是 MonoBehaviors - 您可以、确实并且应该在其中正常使用“唤醒”、“更新”等!
我想这可能就是您要问的。
关于c# - 如何在 C# 中创建选择加入方法继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52417507/