如何判断一个类是继承自泛型类?

问题描述

publicclassA<T>{}publicclassB:A<int>{}publicclassC:B{}如何才能知道C是从A<T>继承的。boolb=typeof(C).IsAssignableFrom(typeof(A<>));//不行boolb=typeof(C).IsAssignableFrom(typeof(A<>).GetGenericTypeDefinition());//也不行那位兄弟对泛型熟悉,帮忙看一下。

解决方案

解决方案二:
上面有点错误。如下:----------------------------------------publicclassA<T>{}publicclassB:A<int>{}publicclassC:B{}如何才能知道C是从A<T>继承的。boolb=typeof(A<int>).IsAssignableFrom(typeof(C));//可以boolb=typeof(A<>).IsAssignableFrom(typeof(C));//不行那位兄弟对泛型熟悉,帮忙看一下。
解决方案三:
returnValue=instance.IsAssignableFrom(c)C#publicvirtualboolIsAssignableFrom(Typec)参数c与当前的Type进行比较的Type。返回值如果c和当前Type表示同一类型,当前Type在c的继承层次结构中,当前Type是c实现的接口,或者c是泛型类型参数且当前Type表示c的约束之一,则为true。如果上述情况都不符合,或者c为空引用(在VisualBasic中为Nothing),则为false。msdn不是写的很清楚了么,只要调用IsAssignableFrom的type是参数type的父类,接口或者约束就可以返回true啊
解决方案四:
这个方法应该是判断当前type的变量是否可以引用参数的实例
解决方案五:
范型只有和具体的泛型参数结合,才可以成为具体的类型
解决方案六:
IsGenericType也可以直接判断

时间: 2024-10-29 12:55:18

如何判断一个类是继承自泛型类?的相关文章

JPanel继承问题... 写了一个类,继承自JPanel,但是控件不显示,跪求求各位大牛...

问题描述 JPanel继承问题... 写了一个类,继承自JPanel,但是控件不显示,跪求求各位大牛... 在做一个世界各个国家的时间的一个Demo.写了一个继承自JPanel类的panel,里面简单的设置了一个Logo,国家名字,还有一个按秒跳动时间,现在的问题就是在这个panel上的控件都不显示了,调了好久了也没有找到原因,所以没办法了,特来求助各位大牛们..... 话不多说,直接贴代码: package timerDemo; import java.awt.BorderLayout; im

c-如何判断一个类能否安全地依赖于拷贝和赋值操作的默认版本?为什么?

问题描述 如何判断一个类能否安全地依赖于拷贝和赋值操作的默认版本?为什么? 初学C++,在书上看到的习题.如果有什么好的建议也请不吝赐教 解决方案 如果你的类成员都是基本数据类型,比如int,byte,char等,那么就可以依赖默认版本 比如一般定义结构体,我们一般没有提供自己额外的拷贝构造函数等 但是对于类,一般还是自己实现,因为你不知道将来是不是会增加新的数据类型 解决方案二: 如果一个类所有的成员都是能够调用默认构造函数,那么他就可以安全的依赖于拷贝和赋值的默认版本. 还有需要注意的是,如

objective-C中如何判断一个类中有没有定义某个方法

C#中可以通过反射分析元数据来解决这个问题,示例代码如下: using System; using System.Reflection; namespace Hello { class Program { static void Main(string[] args) { if (IsMethodDefined(typeof(Utils), "HelloWorld")) { Console.WriteLine("Utils类中有方法HelloWorld"); } e

java-一个类如何继承一个Panel呢

问题描述 一个类如何继承一个Panel呢 在一个Frame中如何继承一个Panel呢,普通继承报错了,需要在Panel中画图,是需要用一个类继承Panel,然后重写paint方法吧? 解决方案 frame不能继承panel,但是你可以在frame中将panel作为成员聚合起来.

C#中说接口是让一个类有两个或两个以上基础类的唯一方法,这句话怎么解释,谢谢!

问题描述 C#中说接口是让一个类有两个或两个以上基础类的唯一方法,这句话怎么解释,谢谢!帮忙举个例子,谢谢! 解决方案 解决方案二:publicinterfaceI1{voidGetX();}publicinterfaceI2{voidGetY();}publicclassclass1:I1,I2{publicvoidGetX(){}publicvoidGetY(){}}解决方案三:我明白楼上说的意思但这种情况,并没有实现一个类有两个或两个以上基础类的情况呀?帮忙指教,谢谢解决方案四:I1,I2

php 重载新的方法和类的继承

重载新的方法 在学习PHP 这种语言中你会发现,PHP中的方法是不能重载的,所谓的方法重载就是定义相同的方法名,通过"参数的个数"不同或"参数的类型"不同,来访问我们的相同方法名的不同方法.但是因为PHP是弱类型的语言,所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的.所以在PHP里面没有方法重载.不能重载也就是在你的项目中不能定义相同方法名的方法.另外,因为P

JAVA中阻止类的继承(官方和非官方)_java

官方办法 JAVA语言提供的一个关键字"FINAL"可以用来履行该任务.看看下面的源代码范例: 复制代码 代码如下: //FinalDemo.java public final class FinalDemo { }     下面让我们来制作另一个类,它将会继承上面声明的类.JAVA语言提供的"EXTENDS"关键字将能够使得一个类继承于一个现有的类. 复制代码 代码如下: //FinalDemo2.java public class FinalDemo2 exte

如何在程序运行时动态修改一个类的属性的get;set;?

问题描述 publicclassMyTestClass{privatestring_name;publicstringName{get{returnstring.Format("名字:{0}",_name);}set{value=value??string.Empty;_name=value.Substring(0,4);}}}publicstaticvoidMain(){DynamicMethodmethod=newDynamicMethod("Set_Name"

relativelayout-定义一个类继承RelativeLayout在用inflater加载布局文件时为什么找不到?

问题描述 定义一个类继承RelativeLayout在用inflater加载布局文件时为什么找不到? 解决方案 http://www.oschina.net/question/657381_122348 解决方案二: 是不是import的R路径不对啊