【发布时间】:2010-03-19 13:24:06
【问题描述】:
如何识别 (.NET 2) 泛型类?
Class A(Of T)
End Class
' not work '
If TypeOf myObject Is A Then
?
【问题讨论】:
如何识别 (.NET 2) 泛型类?
Class A(Of T)
End Class
' not work '
If TypeOf myObject Is A Then
?
【问题讨论】:
如果是c#的话会是这样的:
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;
【讨论】:
class B : A(Integer) 此代码不适用于 B。
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
【讨论】: