Как я могу узнать общий класс?

Как узнать (.NET 2) общий класс?

Class A(Of T)
End Class

' not work '
If TypeOf myObject Is A Then

?

Ответ 1

Если С# будет выглядеть так:

public class A<T>
{
}

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

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

ОБНОВЛЕНО

Похоже, это то, что вам действительно нужно:

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);
}

И может использоваться следующим образом:

public class A<T>
{
}

public class B : A<int>
{

}

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

Ответ 2

  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