我有一个dll文件,其中包含许多从CommandBase类继承的类(比如:CommandA、CommandB、CommandC等)。我正在尝试使用C#反射获取所有这些类的实例,以便我可以在每个实例上调用特定的方法。以下是我目前的代码:
//get assemblies in directory.
string folder = Path.Combine(HttpContext.Current.Server.MapPath("~/"), "bin");
var files = Directory.GetFiles(folder, "*.dll");
//load each assembly.
foreach (string file in files)
{
var assembly = Assembly.LoadFile(file);
if (assembly.FullName == "MyCommandProject")
{
foreach (var type in assembly.GetTypes())
{
if (!type.IsClass || type.IsNotPublic) continue;
if(type is CommandBase)
{
var command = Activator.CreateInstance(type) as CommandBase;
}
}
}
}
我有两个问题。第一,代码中的“if(type is CommandBase)”这一行会得到以下警告:
给定的表达式永远不是类型CommandBase。
第二个问题是我无法找出如何获取实际对象的实例(CommandA,CommandB等等...),仅将其转换为CommandBase是不够的。
Activator.CreateInstance()
,你应该有一个CommandA、CommandB...类的实例(取决于type
),不是吗? - Julien N