// // Filters out methods that are not visible regardless of what the caller is. // - Private and internal methods are only visible when PrivateBinding is on. // // If the method might be visible for some callers it is included into the method group and possibly ignored by overload resolver. // - Public methods on public types are always visible. // - Public methods on internal types are visible if they implement an interface method. // - Protected methods are visible if called from a subclass. // - Private methods are visible if they explicitly implement an interface method. // private bool IsVisible(MethodBase/*!*/ method, bool specialNameOnly) { if (specialNameOnly && !method.IsSpecialName) { return false; } if (Context.DomainManager.Configuration.PrivateBinding) { return true; } if (method.IsPrivate || method.IsAssembly || method.IsFamilyAndAssembly) { return false; } if (method.IsProtected()) { return method.DeclaringType != null && method.DeclaringType.IsVisible && !method.DeclaringType.IsSealed; } return true; }