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 に答える