您正在尝试将类
我有两个类,一个是抽象的,另一个是继承它的
public abstract class Monitor {
public SmallMonitor MiniMonitor { get; set;}
public abstract bool Execute();
}
public class ToolBox1000 : Monitor
{
//implements Monitor
public ToolBox1000()
{
SmallMonitor monitor = new SmallMonitor();
monitor.Test = true;
monitor.Number = 1230;
}
}
public class ToolBox2000 : Monitor
{
//implements Monitor
public ToolBox2000()
{
SmallMonitor monitor = new SmallMonitor();
monitor.Test = true;
monitor.Number = 2034;
}
}
我的问题是,我需要获得使用反射实现Monitor的所有类的列表,然后将它们添加到我需要返回的列表中。。
public static IEnumerable<Monitor> Monitors
{
get
{
List<Monitor> monitors = new List<Monitors>();
List<Type> classes = GetClasses(typeof(Monitor)).OrderBy(x => x.Name).ToList();
foreach(Type c in classes)
{
object oMonitor = Convert.ChangeType(c, typeof(Monitor)).GetType();
Monitor mig = (Monitor)oMonitor;
monitors.Add(mig);
}
return monitors;
}
}
private static List<Type> GetClasses(Type baseType)
{
return Assembly.GetCallingAssembly().GetTypes().Where(type => type.IsSubclassOf(baseType)).ToList();
}
问题是我在这行中得到了一个无效的强制转换
object oMonitor = Convert.ChangeType(c, typeof(Monitor)).GetType();
我需要实现IConvertible
我不知道如何做到这一点,我试了好几次都没有成功,这能做到吗?
Type
的实例转换为类Monitor
的实例,这是不可能的。据我所知,您正试图创建该类型的实例,并将其添加到监视器列表中
基于一些假设,您可以尝试以下代码
public static IEnumerable<Monitor> Monitors
{
get
{
List<Monitor> monitors = new List<Monitor>();
List<Type> classes = GetClasses(typeof(Monitor)).OrderBy(x => x.Name).ToList();
foreach (Type c in classes)
{
object oMonitor = Activator.CreateInstance(c);
Monitor mig = (Monitor)oMonitor;
monitors.Add(mig);
}
return monitors;
}
}
注意更改的线路object oMonitor = Activator.CreateInstance(c);
Activator.CreateInstance将创建给定类型的实例,前提是该实例不是抽象的,并且具有无公共参数的构造函数。