Adam Driscoll
Adam Driscoll

Reputation: 9483

C# - Dynamic Keyword and Interface Implementations

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

Answers (3)

jbtule
jbtule

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

Marc Gravell
Marc Gravell

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

Fyodor Soikin
Fyodor Soikin

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

Related Questions