Runtime reflection on B, C, D not on A. No reflection for private, protected. [properties, methods, events]
class A { } @reflection class B: A { } class C: B { } class D: C { }
I really like Gor's idea of @noreflect for this. You have a network class you don't want as easily reversible, or a security class, or private fields such as password. You just mark the module, type, methods, or fields, as @noreflect. It could even disable compile-time reflection if desired.