I'm assuming this isn't possible but before digging further is there a way to do something like this:
public void ProcessInterface(ISomeInterface obj) {}
//...
dynamic myDyn = GetDynamic<ISomeInterface>()
ProcessInterface(myDyn);
I've seen a post arguing for it but it sounds like it wasn't included.
A little context: .Net assembly exposed through COM -> Silverlight app consuming interface-implementing classes. Would be nice to refer to the objects by interface. I really don't expect that this was what was intended...
No, dynamic
won't make a type pretend to implement an interface (even if it has, via dynamic
, all the methods). Passing it to ProcessInterface
essentially takes away the dynamic
.
dynamic
depends on the calling code just as much as the implementing object. More, even.
You could however make an interface wrapper that uses 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();
}