1

如何使程序集中的现有类型在运行时实现接口(提取接口然后实现它)(使用运行时编织、Mono.Cecil、Common Compiler Infrastructure...)

装配类:

public class MyClass
{
    public method1(){}
    public method2(){}
}

生成

public class IMyClass
{
    method1();
    method2();
}

public class MyClass : IMyClass
{
    public method1(){}
    public method2(){}
}
4

1 回答 1

0

如果我理解正确,您可以使用例如 Impormtu 库(https://github.com/ekonbenefits/impromptu-interface,也有 nuget 包)来实现这一点。完整样本:

internal class Program {
    private static void Main(string[] args) {            
        // suppose it's from another assembly, and you don't have direct reference to type
        var c = Activator.CreateInstance(typeof(MyClass)); 
        IMyClass iface = c.ActLike<IMyClass>();
        iface.method1();
        Console.ReadKey();
    }
}

public class MyClass
{
    public void method1() {
        Console.WriteLine("Method 1");
    }

    public void method2() {
        Console.WriteLine("Method 2");
    }
}

public interface IMyClass {
    void method1();
    void method2();
}

请注意,MyClass 没有实现 IMyClass 接口,但您在运行时将其用作 IMyClass 类型的变量。

如果您在编译时没有接口,并且还想在运行时构建接口- 那么我不明白它如何在现实生活中使用。

于 2015-09-09T13:20:04.970 回答