C# - Dynamic Keyword and Interface Implementations

722 Views Asked by At

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...

3

There are 3 best solutions below

3
On BEST ANSWER

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

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)

0
On

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?