【发布时间】:2011-05-24 04:37:50
【问题描述】:
我有以下实用程序来确定类型是否派生自特定类型:
private static bool DerivesFrom(Type rType, Type rDerivedType)
{
while ((rType != null) && ((rType != rDerivedType)))
rType = rType.BaseType;
return (rType == rDerivedType);
}
(其实不知道有没有更方便的推导测试方法……)
问题是我想确定一个类型是否派生自泛型类型,但没有指定泛型参数。
例如我可以写:
DerivesFrom(typeof(ClassA), typeof(MyGenericClass<ClassB>))
但我需要的是以下内容
DerivesFrom(typeof(ClassA), typeof(MyGenericClass))
我怎样才能实现它?
基于 Darin Miritrov 的示例,这是一个示例应用程序:
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace ConsoleApplication1
{
public class MyGenericClass<T> { }
public class ClassB {}
public class ClassA : MyGenericClass<ClassB> { }
class Program
{
static void Main()
{
bool result = DerivesFrom(typeof(ClassA), typeof(MyGenericClass<>));
Console.WriteLine(result); // prints **false**
}
private static bool DerivesFrom(Type rType, Type rDerivedType)
{
return rType.IsSubclassOf(rDerivedType);
}
}
}
【问题讨论】:
标签: c# generics reflection derived-class