开发者

How can I recognize a generic class?

开发者 https://www.devze.com 2022-12-24 13:18 出处:网络
How can I recognize (.NET 2) a generic class? Class A(Of T) End Class \' not work \' If TypeOf myObject Is A T开发者_StackOverflow中文版hen

How can I recognize (.NET 2) a generic class?

Class A(Of T)
End Class

' not work '
If TypeOf myObject Is A T开发者_StackOverflow中文版hen

?


If c# it would be like this:

public class A<T>
{
}

A<int> a = new A<int>();

if (a.GetType().IsGenericType && 
    a.GetType().GetGenericTypeDefinition() == typeof(A<>))
{
}

UPDATED:

It looks like this is what you really needed:

public static bool IsSubclassOf(Type childType, Type parentType)
{
    bool isParentGeneric = parentType.IsGenericType;

    return IsSubclassOf(childType, parentType, isParentGeneric);
}

private static bool IsSubclassOf(Type childType, Type parentType, bool isParentGeneric)
{
    if (childType == null)
    {
        return false;
    }

    childType = isParentGeneric && childType.IsGenericType ? childType.GetGenericTypeDefinition() : childType;

    if (childType == parentType)
    {
        return true;
    }

    return IsSubclassOf(childType.BaseType, parentType, isParentGeneric);
}

And can be used like this:

public class A<T>
{
}

public class B : A<int>
{

}

B b = new B();
bool isSubclass = IsSubclassOf(b.GetType(), typeof (A<>)); // returns true;


  Public Function IsSubclassOf(ByVal childType As Type, ByVal parentType As Type) As Boolean
    Dim isParentGeneric As Boolean = parentType.IsGenericType

    Return IsSubclassOf(childType, parentType, isParentGeneric)
  End Function

  Private Function IsSubclassOf(ByVal childType As Type, ByVal parentType As Type, ByVal isParentGeneric As Boolean) As Boolean
    If childType Is Nothing Then
      Return False
    End If

    If isParentGeneric AndAlso childType.IsGenericType Then
      childType = childType.GetGenericTypeDefinition()
    End If

    If childType Is parentType Then
      Return True
    End If

    Return IsSubclassOf(childType.BaseType, parentType, isParentGeneric)
  End Function
0

精彩评论

暂无评论...
验证码 换一张
取 消