I think you are constantly mixing 'the way it is in Unity' with 'the way it should be in OOP'. In OOP, as it is understood outside the Unity, subclassing a super type has nothing to do with saying something like "if you are interested, you can declare some arbitrary magic methods to receive a callback". Rather, it's just the way it is with MonoBehaviour in Unity. On the other hand, subclassing a super type in OOP is a way to make developer's intention clear, as it is clearly seen from such cases like a marker interface. Implementing IEnumerable, for example makes it clear that the class which implements it is something that can be enumerated, and it also enforces the class to expose relevant functionalities by contract. Normally, it doesn't work like "extend this class and you will be able to define arbitrary methods to manipulate collections", as it is the case with MonoBehavour in Unity. So, unless you think OOP as it is adopted by the idiomatic C# approach to be something inherently wrong, I believe there's no reason why you should criticize that my understanding to be 'inaccurate' or 'mixed up', when all I did was to acknowledge the differences between the two, and expressed my preferences for a non-Unity specific approach.