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
?