创建一个类以在运行时实现接口(如代理类)

时间:2015-10-29 20:19:17

标签: c# .net proxy runtime cil

首先,我使用Visual Studio 2005和.NET Framework 2.0。不幸的是,我无法使用最新版本的VS / .NET。

我需要能够在运行时创建一个继承另一个类并且还实现某个接口的类。问题是需要继承的类具有相同的接口方法签名。

例如:

$priceData->price_unit

如果我创建另一个类,例如:

public interface ITestInterface
{
    void Test1();
    string Test2(int a, string b);
}

public class TestClass
{
    public void Test1() { ... }
    public string Test2(int a, string b) { ... }
    public void AnotherMethod() { ... }
}

在Visual Studio 2005中,它编译时没有任何问题,因为TestClass已经实现了所有接口的方法/函数。

如果我检查这个类的生成的MSIL代码,我可以看到它创建了一个名为AnotherClass的类型,它继承自TestClass并按照我的预期实现ITestInterface(没有实现方法/函数,因为它们已经在基类中实现了)。

尝试在运行时通过代码执行此操作:

public class AnotherClass : TestClass, ITestInterface
{
}

引发以下异常:

  

未处理的类型' System.TypeLoadException'发生在   mscorlib.dll中

     

其他信息:方法'测试1'在类型' TestClassProxy'从   assembly' TestClassProxy,Version = 0.0.0.0,Culture = neutral,   公钥=空'没有实施。

我无法弄清楚为什么运行时强制我实现接口的方法(如果它们已经在基类中实现的话)。

你有什么想法吗?也许我错过了一个选项?

1 个答案:

答案 0 :(得分:1)

根据Brian建议的this linkthis one中的信息,将基类方法/函数标记为虚拟解决了这个特定问题。

我知道这对基类提出了要求,但在我的情况下这是可以接受的。