Как создать наследуемое наследование метода в C #? - PullRequest
0 голосов
/ 20 сентября 2018

Я хочу создать структуру кода в C #, которая позволяет мне наследовать класс или интерфейс, но позволяет вам «подписаться» на методы в наследовании классов.

Идеальный пример того, что я хочу, - какUno's MonoBehaviour работает.Вы пишете код только для того, что вам нужно, и это просто - не нужно писать методы из базового класса, которые вы просто оставите пустыми.

Пример использования Unity:

public class MyUpdater : MonoBehaviour
{
  int num = 0;

  void Update()
  {
    num++;
  }
}

MonoBehaviourКласс также содержит другие методы opt-in (Start, OnDestroy, и т. д.), но компилятору все равно.

Очевидно, что в Unity много чего происходит внутри MonoBehaviour, и я не собираюсьвоссоздать его.(На самом деле я работаю в рамках единства)

Мне нравится структура кода, и я также работаю фрилансером с людьми, которые могут быть не так хороши с кодированием.Отсутствие необходимости использовать переопределения или exc облегчает понимание и расширение того, что я создал.

Спасибо, что нашли время прочитать!:)


РЕДАКТИРОВАТЬ:

Для некоторого пояснения, я ни в коем случае не новичок в Unity или кодировании, однако я самоучка.Я в основном работаю над созданием бэкэнд-систем.

Как кто-то предложил ниже, я спрашиваю о том, как тиражировать "магические" методы Unity для классов, которые не выходят из MonoBehaviour.

1 Ответ

0 голосов
/ 20 сентября 2018

Ответ 3, если по какой-то причине вас интересует механизм, с помощью которого «волшебные» функции Unity работают в Unity (в текущей версии - он сильно меняется)

обязательно загляните в обширное обсуждениена этом примере:

Как работают методы пробуждения и запуска Unity private?

Это очень неинтересно и ни на что не влияет.

Вам может понравиться этот длительный QA, который доходит до сути этой проблемы:

В Unity, как Unity волшебным образом называет все «Интерфейсы»?


Скорее всего вы просто ищете ключевые слова New и Override в c #.

(У каждого языка есть немного разные синтаксис / парадигмы для наследования.)

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 {

Обратите внимание, что эти новые классына самом деле они монофоненты - вы можете, делать и должны использовать в них «Пробуждение», «Обновление» и т. д. обычно!

Я думаю, это может быть то, о чем вы спрашиваете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...