为什么动态无法在动态构建对象上调用方法?

时间:2010-11-19 05:13:45

标签: c# dynamic

我有一个用TypeBuilder构建的类型来匹配接口,比如::

interface IFoo
{
     int Property{get;}
}

我的代码构建了get_Property方法。如果我将构建的对象转换为IFoo,一切正常。但是,当我将对象用作动态时,代码会抱怨我的IFoo没有实现get_Property。为什么会发生这种情况,我是否可以将动态功能与运行时构建的类型一起使用?

1 个答案:

答案 0 :(得分:1)

dynamic使用公共API。如果您正在使用TypeBuilder,则可能只是提供了一个方法,并将其标记为实现该方法,在这种情况下,它(基本上)是一个显式的接口实现,并且不可发现dynamic。要使用dynamic,可能需要PropertyBuilder和公共属性,属性实现方法标记为接口实现。

为了进行比较,dynamic也会失败:

class Foo : IFoo {
    int IFoo.Property { get {return 5;}}
}