Reputation: 9483
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...
Upvotes: 2
Views: 712
Reputation: 31799
You can use the opensource Impromptu-Interface to do this. It's an automated way to make a interface wrapper and uses the DLR. Impromptu.ActLike<ISomeInterface>(myDyn)
Upvotes: 2
Reputation: 1062725
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();
}
Upvotes: 6
Reputation: 80744
I don't think I understand your point. If you know the exact interface you're be dealing with, why do you need to use dynamic
?
Upvotes: 2