首页 > 解决方案 > 如何在 C# 中创建选择加入方法继承?

问题描述

我想在 C# 中创建一个代码结构,让我继承一个类或接口,但让你“选择加入”继承类中的方法。

我想要的一个完美例子是 Unity 的 MonoBehaviour 是如何工作的。您只需为您需要的内容编写代码,这很简单 - 无需编写基类中的方法,您只需将其留空。

使用 Unity 的示例:

public class MyUpdater : MonoBehaviour
{
  int num = 0;

  void Update()
  {
    num++;
  }
}

MonoBehaviour 类还包含其他可选方法(Start、OnDestroy 等),但编译器不会在意。

显然,Unity 在 MonoBehaviour 中发生了很多事情,我不打算重新创建它。(事实上​​我是在团结中工作)

我喜欢代码结构,并且我也作为自由职业者与可能不擅长编码的人一起工作。不需要使用 overrides 或 exc 可以更容易地理解和扩展我创建的内容。

感谢您花时间阅读!:)


编辑:

澄清一下,我对 Unity 或编码并不陌生,但我是自学成才的。我主要从事创建后端系统的工作。

正如下面有人建议的那样,我在询问如何为不从 MonoBehaviour 扩展的类复制 Unity 的“魔术”方法。

标签: c#classunity3dinheritanceinterface

解决方案


回答 3,如果出于某种原因您对 Unity 的“神奇”功能在 Unity 中工作的机制感兴趣(在当前版本中 - 它发生了很大变化)

请务必在 Google 上对此进行大量讨论,例如:

Unity 私有唤醒更新和启动方法如何工作?

这是非常无趣的,不会影响任何事情。

您可能会喜欢这个类似的冗长 QA,它触及了该问题的核心:

在 Unity 中,Unity 如何神奇地调用所有“接口”?


您可能只是在 C#中寻找NewandOverride关键字。

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

Override 扩展基类中的函数,并将其New 隐藏。这是你的选择 :)

它被广泛解释,例如

https://docs.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 - 您可以、做并且应该在其中正常使用“Awake”、“Update”等!

我想这可能是你要问的。


推荐阅读