2010-05-05 4 views
2

Я предполагаю, что это не возможно, но прежде, чем копать дальше, есть ли способ сделать что-то вроде этого:C# - Динамические ключевые слова и Реализация интерфейса

public void ProcessInterface(ISomeInterface obj) {} 

//... 

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

Я видел post доводов в пользу этого, но похоже, что он не был включен.

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

ответ

6

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

Это то, чего я ожидал. Я думаю, всякий раз, когда мой код получает взломанные идеи, такие как этот поп в мою голову ... –

+0

@Adam - см. Также взломанную идею, которую я добавил .. –

+0

Это наверняка поднимет мой уровень взлома ... Теперь, чтобы написать код для испускания Foo во время выполнения ... –

2

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

+0

Правда, но мне было интересно, возможно ли это. –

2

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

Смежные вопросы