如何明确地在运行时将类型转换为接口

时间:2017-12-14 09:43:55

标签: c# types casting

使用反射,我得到了程序集中的所有类型。如果我知道它实现了接口“ICommand”

,我如何将Type t转换为ICommand
ICommand 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?

1 个答案:

答案 0 :(得分:7)

您正在尝试将Type ICommand类型t投射到var obj = Activator.CreateInstance(t); var C = (ICommand)obj; ,但它没有实现。

从代码的外观来看,您需要创建一个{{1}}的实例,然后将其转换为:

{{1}}