本文整理汇总了C#中IType.GetNonInterfaceBaseTypes方法的典型用法代码示例。如果您正苦于以下问题:C# IType.GetNonInterfaceBaseTypes方法的具体用法?C# IType.GetNonInterfaceBaseTypes怎么用?C# IType.GetNonInterfaceBaseTypes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IType
的用法示例。
在下文中一共展示了IType.GetNonInterfaceBaseTypes方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetNestedTypes
public static IEnumerable<IType> GetNestedTypes(IType type, IList<IType> nestedTypeArguments, Predicate<ITypeDefinition> filter, GetMemberOptions options)
{
if ((options & GetMemberOptions.IgnoreInheritedMembers) == GetMemberOptions.IgnoreInheritedMembers) {
return GetNestedTypesImpl(type, nestedTypeArguments, filter, options);
} else {
return type.GetNonInterfaceBaseTypes().SelectMany(t => GetNestedTypesImpl(t, nestedTypeArguments, filter, options));
}
}
示例2: AddMembers
/// <summary>
/// Adds members to 'newMethods'/'newNonMethod'.
/// Removes any members in the existing lookup groups that were hidden by added members.
/// Substitutes 'virtual' members in the existing lookup groups for added 'override' members.
/// </summary>
/// <param name="type">Declaring type of the members</param>
/// <param name="members">List of members to add.</param>
/// <param name="lookupGroups">List of existing lookup groups</param>
/// <param name="treatAllParameterizedMembersAsMethods">Whether to treat properties as methods</param>
/// <param name="typeBaseTypes">The base types of 'type' (initialized on demand)</param>
/// <param name="newMethods">The target list for methods (created on demand).</param>
/// <param name="newNonMethod">The target variable for non-method members.</param>
void AddMembers(IType type, IEnumerable<IMember> members, List<LookupGroup> lookupGroups,
bool treatAllParameterizedMembersAsMethods,
ref IEnumerable<IType> typeBaseTypes, ref List<IParameterizedMember> newMethods, ref IMember newNonMethod)
{
foreach (IMember member in members) {
IParameterizedMember method;
if (treatAllParameterizedMembersAsMethods)
method = member as IParameterizedMember;
else
method = member as IMethod;
bool replacedVirtualMemberWithOverride = false;
if (member.IsOverride) {
// Replacing virtual member with override:
// Go backwards so that we find the corresponding virtual member
// in the most-derived type
for (int i = lookupGroups.Count - 1; i >= 0 && !replacedVirtualMemberWithOverride; i--) {
if (typeBaseTypes == null)
typeBaseTypes = type.GetNonInterfaceBaseTypes(context);
var lookupGroup = lookupGroups[i];
if (typeBaseTypes.Contains(lookupGroup.DeclaringType)) {
if (method != null) {
// Find the matching method, and replace it with the override
for (int j = 0; j < lookupGroup.Methods.Count; j++) {
if (ParameterListComparer.Compare(context, method, lookupGroup.Methods[j])) {
lookupGroup.Methods[j] = method;
replacedVirtualMemberWithOverride = true;
break;
}
}
} else {
// If the member type matches, replace it with the override
if (lookupGroup.NonMethod != null && lookupGroup.NonMethod.EntityType == member.EntityType) {
lookupGroup.NonMethod = member;
replacedVirtualMemberWithOverride = true;
break;
}
}
}
}
}
// If the member wasn't an override, or if we didn't find any matching virtual method,
// proceed to add the member.
if (!replacedVirtualMemberWithOverride) {
// Make the member hide other members:
foreach (var lookupGroup in lookupGroups) {
if (lookupGroup.AllHidden)
continue; // everything is already hidden
if (typeBaseTypes == null)
typeBaseTypes = type.GetNonInterfaceBaseTypes(context);
if (typeBaseTypes.Contains(lookupGroup.DeclaringType)) {
// Methods hide all non-methods; Non-methods hide everything
lookupGroup.NestedTypes = null;
lookupGroup.NonMethodIsHidden = true;
if (method == null) { // !(member is IMethod)
lookupGroup.MethodsAreHidden = true;
}
}
}
// Add the new member
if (method != null) {
if (newMethods == null)
newMethods = new List<IParameterizedMember>();
newMethods.Add(method);
} else {
newNonMethod = member;
}
}
}
}
示例3: AddNestedTypes
/// <summary>
/// Adds the nested types to 'newNestedTypes' and removes any hidden members from the existing lookup groups.
/// </summary>
/// <param name="type">Declaring type of the nested types</param>
/// <param name="nestedTypes">List of nested types to add.</param>
/// <param name="typeArgumentCount">The number of type arguments - used for hiding types from the base class</param>
/// <param name="lookupGroups">List of existing lookup groups</param>
/// <param name="typeBaseTypes">The base types of 'type' (initialized on demand)</param>
/// <param name="newNestedTypes">The target list (created on demand).</param>
void AddNestedTypes(IType type, IEnumerable<IType> nestedTypes, int typeArgumentCount,
List<LookupGroup> lookupGroups,
ref IEnumerable<IType> typeBaseTypes,
ref List<IType> newNestedTypes)
{
foreach (IType nestedType in nestedTypes) {
// Remove all non-types declared in a base type of 'type',
// and all types with same number of type parameters declared in a base type of 'type'.
foreach (var lookupGroup in lookupGroups) {
if (lookupGroup.AllHidden)
continue; // everything is already hidden
if (typeBaseTypes == null)
typeBaseTypes = type.GetNonInterfaceBaseTypes(context);
if (typeBaseTypes.Contains(lookupGroup.DeclaringType)) {
lookupGroup.MethodsAreHidden = true;
lookupGroup.NonMethodIsHidden = true;
if (lookupGroup.NestedTypes != null)
lookupGroup.NestedTypes.RemoveAll(t => InnerTypeParameterCount(t) == typeArgumentCount);
}
}
// Add the new nested type.
if (newNestedTypes == null)
newNestedTypes = new List<IType>();
newNestedTypes.Add(nestedType);
}
}
示例4: LookupIndexers
/// <summary>
/// Looks up the indexers on the target type.
/// </summary>
public IList<MethodListWithDeclaringType> LookupIndexers(IType targetType)
{
bool allowProtectedAccess = IsProtectedAccessAllowed(targetType);
Predicate<IProperty> filter = delegate(IProperty property) {
return property.IsIndexer && IsAccessible(property, allowProtectedAccess);
};
List<LookupGroup> lookupGroups = new List<LookupGroup>();
foreach (IType type in targetType.GetNonInterfaceBaseTypes(context)) {
List<IParameterizedMember> newMethods = null;
IMember newNonMethod = null;
IEnumerable<IType> typeBaseTypes = null;
var members = type.GetProperties(context, filter, GetMemberOptions.IgnoreInheritedMembers);
AddMembers(type, members, lookupGroups, true, ref typeBaseTypes, ref newMethods, ref newNonMethod);
if (newMethods != null || newNonMethod != null)
lookupGroups.Add(new LookupGroup(type, null, newMethods, newNonMethod));
}
// Remove interface members hidden by class members.
if (targetType.Kind == TypeKind.TypeParameter) {
// This can happen only with type parameters.
RemoveInterfaceMembersHiddenByClassMembers(lookupGroups);
}
// Remove all hidden groups
lookupGroups.RemoveAll(g => g.MethodsAreHidden || g.Methods.Count == 0);
MethodListWithDeclaringType[] methodLists = new MethodListWithDeclaringType[lookupGroups.Count];
for (int i = 0; i < methodLists.Length; i++) {
methodLists[i] = new MethodListWithDeclaringType(lookupGroups[i].DeclaringType, lookupGroups[i].Methods);
}
return methodLists;
}
示例5: LookupType
public ResolveResult LookupType(IType declaringType, string name, IList<IType> typeArguments, bool parameterizeResultType = true)
{
int typeArgumentCount = typeArguments.Count;
Predicate<ITypeDefinition> filter = delegate (ITypeDefinition d) {
return InnerTypeParameterCount(d) == typeArgumentCount && d.Name == name && IsAccessible(d, true);
};
List<LookupGroup> lookupGroups = new List<LookupGroup>();
if (declaringType.Kind != TypeKind.TypeParameter) {
foreach (IType type in declaringType.GetNonInterfaceBaseTypes(context)) {
List<IType> newNestedTypes = null;
IEnumerable<IType> typeBaseTypes = null;
IEnumerable<IType> nestedTypes;
if (parameterizeResultType) {
nestedTypes = type.GetNestedTypes(typeArguments, context, filter, GetMemberOptions.IgnoreInheritedMembers);
} else {
nestedTypes = type.GetNestedTypes(context, filter, GetMemberOptions.IgnoreInheritedMembers | GetMemberOptions.ReturnMemberDefinitions);
}
AddNestedTypes(type, nestedTypes, typeArgumentCount, lookupGroups, ref typeBaseTypes, ref newNestedTypes);
if (newNestedTypes != null)
lookupGroups.Add(new LookupGroup(type, newNestedTypes, null, null));
}
}
lookupGroups.RemoveAll(g => g.AllHidden);
Debug.Assert(lookupGroups.All(g => g.NestedTypes != null && g.NestedTypes.Count > 0));
if (lookupGroups.Count == 0) {
return new UnknownMemberResolveResult(declaringType, name, typeArguments);
}
LookupGroup resultGroup = lookupGroups[lookupGroups.Count - 1];
if (resultGroup.NestedTypes.Count > 1 || lookupGroups.Count > 1)
return new AmbiguousTypeResolveResult(resultGroup.NestedTypes[0]);
else
return new TypeResolveResult(resultGroup.NestedTypes[0]);
}
示例6: GetMethods
public static IEnumerable<IMethod> GetMethods(IType type, IList<IType> typeArguments, Predicate<IUnresolvedMethod> filter, GetMemberOptions options)
{
if (typeArguments != null && typeArguments.Count > 0) {
filter = FilterTypeParameterCount(typeArguments.Count).And(filter);
}
if ((options & GetMemberOptions.IgnoreInheritedMembers) == GetMemberOptions.IgnoreInheritedMembers) {
return GetMethodsImpl(type, typeArguments, filter, options);
} else {
return type.GetNonInterfaceBaseTypes().SelectMany(t => GetMethodsImpl(t, typeArguments, filter, options));
}
}
示例7: GetMembers
public static IEnumerable<IMember> GetMembers(IType type, Predicate<IUnresolvedMember> filter, GetMemberOptions options)
{
if ((options & GetMemberOptions.IgnoreInheritedMembers) == GetMemberOptions.IgnoreInheritedMembers) {
return GetMembersImpl(type, filter, options);
} else {
return type.GetNonInterfaceBaseTypes().SelectMany(t => GetMembersImpl(t, filter, options));
}
}
示例8: GetEvents
public static IEnumerable<IEvent> GetEvents(IType type, ITypeResolveContext context, Predicate<IEvent> filter, GetMemberOptions options)
{
if ((options & GetMemberOptions.IgnoreInheritedMembers) == GetMemberOptions.IgnoreInheritedMembers) {
return GetEventsImpl(type, context, filter, options);
} else {
return type.GetNonInterfaceBaseTypes(context).SelectMany(t => GetEventsImpl(t, context, filter, options));
}
}