В c# такое поведение может быть достигнуто с помощью отражения .
Один пример в комментариях упоминает Unity и его методы, такие как OnBeginDrag
или Update
. Они не вызываются с помощью c# events
. Unity в основном написан на c ++ и после компиляции кода c# Unity ищет все классы, реализующие определенные интерфейсы или наследующие от определенных классов (например, MonoBehaviour
), и проверяет, есть ли у них подходящие методы (например, Update()
), чтобы он мог при необходимости вызывайте их позже.
В другом комментарии упоминается Photon, сетевой движок, обычно используемый в Unity. В этом случае нет "волхвов c" или даже отражения. Чтобы получить обратные вызовы Photon'а, вы должны вызвать метод PhotonNetwork.AddCallbackTarget
и передать экземпляр вашего класса в качестве аргумента. Единственная запутанная вещь в случае с Фотоном - факт, что вам не нужно делать это напрямую. Вместо того, чтобы вызывать этот метод самостоятельно, вы можете просто унаследовать класс MonoBehaviourPunCallbacks
, который реализует все интерфейсы обратного вызова Photon'а и вызовы PhotonNetwork.AddCallbackTarget
в его методе OnEnable
. Этот метод в свою очередь вызывается Unity, как я объяснил ранее.