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

C# 为什么dynamic无法在动态构建的对象上调用方法?,c#,dynamic,C#,Dynamic,我使用TypeBuilder构建了一个类型来匹配接口,如下所示: interface IFoo { int Property{get;} } 我的代码构建get_属性方法。如果我将构建的对象转换为IFoo,一切都会正常工作。但是,当我将对象用作动态对象时,代码会抱怨我的IFoo没有实现get\u属性。为什么会发生这种情况,我不能对运行时生成的类型使用动态功能吗?dynamic使用公共API。如果您使用的是TypeBuilder,则可能您刚刚提供了一个方法并将其标记为实现该方法,在这种

我使用
TypeBuilder
构建了一个类型来匹配接口,如下所示:

interface IFoo
{
     int Property{get;}
}

我的代码构建get_属性方法。如果我将构建的对象转换为IFoo,一切都会正常工作。但是,当我将对象用作动态对象时,代码会抱怨我的IFoo没有实现get\u属性。为什么会发生这种情况,我不能对运行时生成的类型使用动态功能吗?

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

为了进行比较,
dynamic
也会在以下情况下失败:

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

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

为了进行比较,
dynamic
也会在以下情况下失败:

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

哇,谢谢你的快速回复!那真是太他妈的差劲了。我想我得在我的鸭子锥上多做些工作。我想强迫C#成为一种动态语言真的很难。哇,谢谢你的快速响应!那真是太他妈的差劲了。我想我得在我的鸭子锥上多做些工作。我想强迫C成为一种动态语言真的很难。