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

Ada*_*oll 2 c# silverlight .net-4.0 dynamic-keyword

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

public void ProcessInterface(ISomeInterface obj) {}

//...

dynamic myDyn = GetDynamic<ISomeInterface>() 
ProcessInterface(myDyn);
Run Code Online (Sandbox Code Playgroud)

我看过一篇帖子争论它,但听起来它没有被包括在内.

一点上下文:通过COM公开的.Net程序集 - > Silverlight app消耗接口实现类.通过接口引用对象会很好.我真的不希望这是有意的......

Mar*_*ell 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();
}
Run Code Online (Sandbox Code Playgroud)