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中看到它们,它们会很可怕。