2015-09-09 53 views
1

如何使裝配中的現有類型在運行時實現接口(提取接口然後實現它)(使用運行時編織,Mono.Cecil能做到,普通的編譯器基礎設施...)如何使裝配中的現有類型實現.Net中的接口

類彙編:

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

要生成

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

public class MyClass : IMyClass 
{ 
    public method1(){} 
    public method2(){} 
} 
+0

用於什麼?你想達到什麼目的? – netaholic

+0

對於代碼分析/重構工具:將常用方法提取到接口中。用於遺留代碼遷移 –

回答

0

如果我理解你的權利,你可以與考試實現這一目標Ple 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的變量。

如果你在編譯時沒有接口,並且想在運行時建立接口 - 那麼我不明白它在現實生活中如何使用。

相關問題