serhio
serhio

Reputation: 28586

How can I recognize a generic class?

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

Class A(Of T)
End Class

' not work '
If TypeOf myObject Is A Then

?

Upvotes: 1

Views: 666

Answers (2)

serhio
serhio

Reputation: 28586

  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

Upvotes: 0

Andrew Bezzub
Andrew Bezzub

Reputation: 16032

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;

Upvotes: 4

Related Questions