使用反射,我得到了程序集中的所有类型。如果我知道它实现了接口“ICommand”
,我如何将Type t转换为ICommandICommand C;
foreach(Type t in asm.GetTypes())
{
if (t.GetInterfaces()[0].Name is "ICommand")
{
C = (ICommand)t; //throws Exception here - Unable
//to cast to ICommand
RootDir.AddCommand(C, t.Namespace.Split('.'));
}
}
我正在尝试投射的类型
的示例public interface ICommand
{
string HelpDescription { get; }
void Execute(CommandClass CC);
}
class CurrentDir : ICommand
{
public string HelpDescription => "Current Directory - Change current directory";
public static explicit operator CurrentDir (Type T)
{
return new CurrentDir();
}
void ICommand.Execute(CommandClass CC)
{
throw new NotImplementedException();
}
}
我应该如何实现它,以便它可以从System.Type转换为ICommand?
答案 0 :(得分:7)
您正在尝试将Type
ICommand
类型t
投射到var obj = Activator.CreateInstance(t);
var C = (ICommand)obj;
,但它没有实现。
从代码的外观来看,您需要创建一个{{1}}的实例,然后将其转换为:
{{1}}