c#-从泛型类型确定类型派生
作者:互联网
我有以下实用程序例程,用于确定类型是否从特定类型派生:
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);
}
}
}
解决方法:
您可以将通用参数保持打开状态:
DerivesFrom(typeof(ClassA), typeof(MyGenericClass<>));
应该管用.例:
public class ClassA { }
public class MyGenericClass<T>: ClassA { }
class Program
{
static void Main()
{
var result = DerivesFrom(typeof(MyGenericClass<>), typeof(ClassA));
Console.WriteLine(result); // prints True
}
private static bool DerivesFrom(Type rType, Type rDerivedType)
{
return rType.IsSubclassOf(rDerivedType);
}
}
还要注意IsSubClassOf方法的用法,它应该简化DerivesFrom方法并破坏其目的.您也可以查看IsAssignableFrom方法.
标签:derived-class,reflection,generics,c 来源: https://codeday.me/bug/20191023/1914632.html