c# - 如何在 C# 中创建选择加入方法继承?

标签 c# class unity3d inheritance interface

我想在 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# 中的NewOverride 关键字。

(每种语言的继承语法/范例都略有不同。)

Override 扩展基类中的函数,New 隐藏它。选择权在你:)

它被广泛解释,例如

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/knowing-when-to-use-override-and-new-keywords

(如果您从字面上询问 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/

相关文章:

c# - 如何检查我的 List<string> 中的任何单词是否包含在文本中

c# - 如何在 C# 中将 sbyte[] 转换为 byte[]?

c++ - 如何检查对象的类型是否是 C++ 中的特定子类?

c# - 如何通过 Entity Framework 访问多对多表?网站

c++ - 如何将数组保存到两个类方法中?

php - 何时在 PHP 中使用类与函数

c# - Unity 3D 中的 MonoBehaviour 是什么?

c# - 如何正确地将字符串从 Unity 编码到 C/C++?

ios - xcode 中的 iphonesimulator(未找到 SDK)错误

c# - 使用 Decimal.TryParse 转换屏蔽货币字符串