Do not derive from System.Type or any other types deriving from System.MemberInfo. You might infer from all those protected members on Type that we intended to have folks derive from Type and have those 3ed party Types somehow "play nice" with the rest of Reflection. This was my first impression however having been the steward of the API for these last few years I would not suggest anyone derive from Type. I'm not sure why we allowed this in the first place. It may have simply been an oversight or it may have been part of some larger vision. But whatever the reason the reality is that most Reflection APIs throw if any Type arguments are not RuntimeTypes or TypeBuilders and so don't offer any support for 3ed party Types (the reason Type is not simply sealed is so that RunitmeType and TypeBuilder to both derive from Type). IMHO we should have made all MemberInfo constructors internal and I suggest you treat the constructors as if they were.