C# - 动态关键字和接口实现

时间:2010-05-05 03:48:20

标签: c# silverlight .net-4.0 dynamic-keyword

我认为这是不可能的,但在进一步挖掘之前有办法做这样的事情:

public void ProcessInterface(ISomeInterface obj) {}

//...

dynamic myDyn = GetDynamic<ISomeInterface>() 
ProcessInterface(myDyn);

我见过post争论它,但听起来好像没有包括在内。

一个小环境:通过COM公开的.Net程序集 - &gt; Silverlight应用程序正在使用接口实现类。通过接口引用对象会很好。我真的不希望这是预期的......

3 个答案:

答案 0 :(得分:6)

不,dynamic不会让类型假装实现接口(即使它通过dynamic具有所有方法)。将其传递给ProcessInterface基本上会夺走dynamic

dynamic取决于调用代码,与实现对象一样多。更多,甚至。

可以然后创建一个使用duck typing的接口包装器:

class Foo : IBar {
    readonly dynamic duck;
    public Foo(dynamic duck) { this.duck = duck; }

    void IBar.SomeMethod(int arg) {
        duck.SomeMethod(arg);
    }
    string IBar.SomeOtherMethod() {
        return duck.SomeOtherMethod();
    }
}
interface IBar {
    void SomeMethod(int arg);
    string SomeOtherMethod();
}

答案 1 :(得分:2)

我认为我不明白你的观点。如果您知道正在处理的确切界面,为什么需要使用dynamic

答案 2 :(得分:2)

您可以使用opensource Impromptu-Interface执行此操作。这是一种自动生成接口包装器并使用DLR的方法。 Impromptu.ActLike<ISomeInterface>(myDyn)