C# - Динамические реализации ключевых слов и интерфейса

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

public void ProcessInterface(ISomeInterface obj) {}

//...

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

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

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

3 ответа

Решение

Нет, 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();
}

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

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

Другие вопросы по тегам