C# 反射指定类的子类
我想使用C#的反射机制,反射出一个类的所有子类
--------------------编程问答-------------------- list2里面有"LineBlock"和"SquareBlock"两个值
//抽象类
abstract class IBlock
{
///内容省略
}
class LineBlock : IBlock
{
///内容省略
}
class SquareBlock : IBlock
{
///内容省略
}
//接口
inte易做图ce ISquare
{
///内容省略
}
class Round : ISquare
{
///内容省略
}
class Square : ISquare
{
///内容省略
}
//反射方法
/// <summary>
/// 獲取指定類型的子類名稱
/// </summary>
/// <param name="superClassType"></param>
/// <returns></returns>
private List<string> GetSubClassName(Type superClassType)
{
List<string> list = new List<string>();
Assembly a = Assembly.GetAssembly(superClassType);
foreach (Type t in a.GetTypes())
{
//是否是類
if (t.IsClass)
{
//是否是當前類的派生類
if (t.IsSubclassOf(superClassType))
{
list.Add(t.Name);
}
}
}
return list;
}
//执行方法
List<string> list1=GetSubClassName(typeof(ISquare));
List<string> list2=GetSubClassName(typeof(IBlock));
//结果
list1里面有"LineBlock"和"SquareBlock"两个值
list2是空值
我觉得是下面这句的问题
if (t.IsSubclassOf(superClassType))
有人知道为什么吗?
list1是空值
--------------------编程问答--------------------
哦,对,看错了
请问有解决方法吗? --------------------编程问答-------------------- 接口应该使用GetInte易做图ce
MSDN说的很清楚
http://msdn.microsoft.com/zh-cn/library/system.type.issubclassof.aspx
备注
IsSubclassOf 方法不能用于确定某个接口是否派生自另一个接口或某个类是否实现了某个接口。对于此目的,应该使用 GetInte易做图ce 方法。请注意,如果某个类型是从接口派生的,而且该类型是 Object 的子类,则此方法将返回 true。
GetInte易做图ce 参考
http://msdn.microsoft.com/zh-cn/library/system.type.getinte易做图ce.aspx --------------------编程问答-------------------- if (Array.IndexOf(t.GetInte易做图ces(), superClassType) > -1 || t.IsSubclassOf(superClassType)) --------------------编程问答-------------------- up --------------------编程问答-------------------- 这个问题 我记得那时是想了2个多星期,最后终于搞定
public void FillCombox()
{
Type[] type = Assembly.LoadFile(Application.ExecutablePath.ToString()).GetTypes();
foreach (Type tp in type)
{
//其中Vehicle是父类
if (tp.BaseType == typeof(Vehicle))
{
.....
}
}
} --------------------编程问答-------------------- 到目前为止,还没怎么用过反射,占个位,学习
补充:.NET技术 , C#