Как можно создать систему компонентов, похожую на unity(Start,Update пр.)

В качестве практики пишу игровой движок, столкнулся с проблемой. Хотелось бы добавить возможность создавать компоненты, о которых изначально программа и не могла знать, но в конечном образе из-за наследования одного основного класса могла запустить метод "Start" или "Update". Для наглядности вот что хотелось бы сделать:

using ...;

public class ObjectBehavior
{

    public virtual void Start() 
    { 
    // Для каждого класса, наследующего этот класс запускать метод Start, при условии, что он там прописан. (они разные и про них ничего заранее программа не знает) 
    }

    public virtual void Update()
    {
     // Для каждого класса, наследующего этот класс запускать метод Update, при условии, что он там прописан.
    }
}

// другой файл

public class CameraController : ObjectBehavior
{
    public void Update()
    {
         // Внезапный метод Update во внезапном классе CameraController, наследующий OB.

         // Метода Start здесь нет, он не должен запускаться из OB.
    }
}

Ответы (1 шт):

Автор решения: Сергей

В данном случае можно создать функцию Instantiate или Create и в ней в лист экземпляров будет записываться экземпляр класса(мы его можем закастить в класс ObjectBehavior), затем при Update циклом проходится по листу и запускать в нём функцию start или update.

public static void Instantiate(ObjectBehavior behavior)
{
   behaviors.Add(behavior);
}

public void SomeVoidInSomeClass()
{
   // Работает только в случае, если класс наследуется от ObjectBehavior
   ObjectBehavior.Instantiate((ObjectBehavior)this);
}
→ Ссылка