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

C#-动态关键字和接口实现,c#,silverlight,.net-4.0,dynamic-keyword,C#,Silverlight,.net 4.0,Dynamic Keyword,我假设这是不可能的,但在进一步挖掘之前,有没有一种方法可以做到这一点: public void ProcessInterface(ISomeInterface obj) {} //... dynamic myDyn = GetDynamic<ISomeInterface>() ProcessInterface(myDyn); public-void-ProcessInterface(接口对象){} //... 动态myDyn=GetDynamic() 进程接口(myDyn);

我假设这是不可能的,但在进一步挖掘之前,有没有一种方法可以做到这一点:

public void ProcessInterface(ISomeInterface obj) {}

//...

dynamic myDyn = GetDynamic<ISomeInterface>() 
ProcessInterface(myDyn);
public-void-ProcessInterface(接口对象){}
//...
动态myDyn=GetDynamic()
进程接口(myDyn);
我见过有人为此争论,但听起来好像不包括在内


一个小上下文:.Net程序集通过COM->Silverlight应用程序消费接口实现类公开。最好通过接口引用对象。我真的不认为这是我的本意……

我想我不明白你的意思。如果您知道要处理的确切接口,为什么需要使用
dynamic

不,
dynamic
不会让类型假装实现接口(即使它通过
dynamic
实现了所有方法)。将其传递到
ProcessInterface
实际上会删除
动态

dynamic
与实现对象一样依赖于调用代码。甚至更多

但是,您可以制作一个使用duck类型的接口包装器:

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();
}

您可以使用开源软件来实现这一点。这是一种自动生成接口包装器并使用DLR的方法<代码>即兴表演(myDyn)

这正是我所期望的。我想,每当我的代码中出现像这样的黑客想法时……这肯定会提高我的黑客水平……现在就编写一些代码来在运行时发出Foo…@Adam-我不建议这样-那些
duck.SomeMethod(arg)
etc调用,如果你在reflector中看到它们,它们会很可怕。