簡體   English   中英

如何在C#中創建opt-in方法繼承?

[英]How can I create opt-in method inheritance in C#?

我想在C#中創建一個代碼結構,讓我繼承一個類或接口,但是讓你“繼承”繼承類的方法。

我想要的一個完美的例子是Unity的MonoBehaviour如何運作。 您只需編寫所需內容的代碼,這很簡單 - 無需從基類中編寫只留空的方法。

使用Unity的示例:

public class MyUpdater : MonoBehaviour
{
  int num = 0;

  void Update()
  {
    num++;
  }
}

MonoBehaviour類還包含其他選擇加入方法(Start,OnDestroy,exc。),但編譯器不關心。

顯然Unity在MonoBehaviour中有很多內容,我不打算重新創建它。 (事實上​​我在團結中工作)

我喜歡代碼結構,而且我也是一名自由職業者,可能與那些編碼效果不佳的人一起工作。 不需要使用覆蓋或刪除使得更容易理解和擴展我創建的內容。

感謝您抽出寶貴時間閱讀! :)


編輯:

對於一些澄清,我對Unity或編碼並不陌生,但我是自學成才。 我主要負責創建后端系統。

正如下面有人建議的那樣,我問的是如何為不從MonoBehaviour擴展的類復制Unity的“魔術”方法。

答案3,如果由於某種原因你對Unity的“神奇”功能在Unity中運行的機制感興趣(在當前版本中 - 它會發生很大變化)

一定要谷歌這個廣泛的討論,例如:

Unity private喚醒更新和啟動方法如何工作?

這是非常無趣的,不會影響任何事情。

你可能會喜歡這個類似冗長的QA,這個QA觸及了這個問題的核心:

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


您可能只是在c#中查找 NewOverride關鍵字。

(每種語言的繼承語法/范例都略有不同。)

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”等通常在其中!

我想這可能就是你要問的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM