C # - Динамические реализации ключевых слов и интерфейса - PullRequest
2 голосов
/ 05 мая 2010

Я предполагаю, что это невозможно, но прежде чем копать дальше, есть способ сделать что-то вроде этого:

public void ProcessInterface(ISomeInterface obj) {}

//...

dynamic myDyn = GetDynamic<ISomeInterface>() 
ProcessInterface(myDyn);

Я видел сообщение , спорящее об этомно похоже, что это не было включено.

Небольшой контекст: сборка .Net, предоставляемая через COM -> приложение Silverlight, использующее классы, реализующие интерфейс.Было бы неплохо ссылаться на объекты по интерфейсу.Я действительно не ожидаю, что это было то, что было задумано ...

Ответы [ 3 ]

6 голосов
/ 05 мая 2010

Нет, dynamic не заставит тип претендовать на реализацию интерфейса (даже если он имеет, через dynamic, все методы). Передача в ProcessInterface по существу отнимает dynamic.

dynamic зависит от , вызывающего код , так же, как и от объекта реализации. Больше, даже.

Вы могли бы однако создать интерфейсную оболочку, которая использует утку:

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();
}
2 голосов
/ 28 февраля 2011

Вы можете использовать с открытым исходным кодом Impromptu-Interface для этого. Это автоматизированный способ создания обертки интерфейса и использует DLR. Impromptu.ActLike<ISomeInterface>(myDyn)

2 голосов
/ 05 мая 2010

Не думаю, что понимаю вашу мысль. Если вы знаете точный интерфейс, с которым имеете дело, зачем вам использовать dynamic?

...