// TODO: if it's an indexer then we want to override get_Item/set_Item methods // which map to [] and []= internal void AddBaseMethods(Type finishedType, SpecialNames specialNames) { // "Adds" base methods to super type - this makes super(...).xyz to work - otherwise // we'd return a function that did a virtual call resulting in a stack overflow. OverriddenMembers overrides = OverriddenMembers.GetForType(finishedType); foreach (MethodInfo mi in finishedType.GetMethods()) { if (!ShouldOverrideVirtual(mi)) { continue; } string methodName = mi.Name; if (methodName.StartsWith(BaseMethodPrefix) || methodName.StartsWith(FieldGetterPrefix) || methodName.StartsWith(FieldSetterPrefix)) { foreach (string newName in specialNames.GetBaseName(mi)) { if (mi.IsSpecialName && (newName.StartsWith("get_") || newName.StartsWith("set_"))) { StoreOverriddenProperty(overrides, mi, newName); } else if (mi.IsSpecialName && (newName.StartsWith(FieldGetterPrefix) || newName.StartsWith(FieldSetterPrefix))) { StoreOverriddenField(overrides, mi, newName); } else { StoreOverriddenMethod(overrides, mi, newName); } } } } }
public static List <MemberTracker /*!*/> GetOverriddenMembersForType(Type /*!*/ type, string /*!*/ name) { return(OverriddenMembers.GetForType(type).GetMembers(name)); }