我认为这是不可能的,但在进一步挖掘之前有办法做这样的事情:
public void ProcessInterface(ISomeInterface obj) {}
//...
dynamic myDyn = GetDynamic<ISomeInterface>()
ProcessInterface(myDyn);
我见过post争论它,但听起来好像没有包括在内。
一个小环境:通过COM公开的.Net程序集 - &gt; Silverlight应用程序正在使用接口实现类。通过接口引用对象会很好。我真的不希望这是预期的......
答案 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)