2

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

public void ProcessInterface(ISomeInterface obj) {}

//...

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

我看过一个帖子争论它,但听起来它不包括在内。

一点上下文:通过 COM 公开的 .Net 程序集 -> Silverlight 应用程序消耗接口实现类。通过接口引用对象会很好。我真的没想到这是故意的……

4

3 回答 3

6

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

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

但是,您可以制作一个使用鸭子类型的界面包装器:

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();
}
于 2010-05-05T04:04:01.257 回答
2

我不认为我理解你的意思。如果您知道要处理的确切界面,为什么需要使用dynamic

于 2010-05-05T04:03:10.293 回答
2

您可以使用开源Impromptu-Interface来执行此操作。这是一种制作接口包装器并使用 DLR 的自动化方式。Impromptu.ActLike<ISomeInterface>(myDyn)

于 2011-02-28T14:58:03.460 回答