>识别来自.net
>对象时。 当基类是通用的时,标准Type
的方法不够。IsSubclassOf
>
挑战:
考虑此示例:
<code class="language-csharp">public class GenericClass<T> : IGenericInterface<T> { } public class TestClass : GenericClass<string> { }</code>
>是因为typeof(TestClass).IsSubclassOf(typeof(GenericClass<string>))
是一种封闭的通用类型,而不是通用类型的定义。
typeof(GenericClass<string>)
以下辅助函数有效地确定类型是否从
raw的通用类型定义:>
此函数通过<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type genericType, Type toCheck) { while (toCheck != null && toCheck != typeof(object)) { Type currentType = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck; if (genericType == currentType) { return true; } toCheck = toCheck.BaseType; } return false; }</code>
获得通用类型定义。 然后,该功能将此原始的通用类型定义与提供的toCheck
进行比较。 一场比赛证实了从原始通用类型的继承。object
>
GetGenericTypeDefinition()
这种方法正确地识别了从通用类中的继承,在这种情况下克服了标准genericType
方法的局限性。 您可以使用此函数可靠地确定a
以上是如何确定一个类是否继承自 .NET 中的泛型类?的详细内容。更多信息请关注PHP中文网其他相关文章!