Search code examples
c#silverlight.net-4.0dynamic-keyword

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


Solution

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