Будут ли динамические объекты C# 4.0 иметь какие-то возможности для утиной печати?

StackOverflow https://stackoverflow.com/questions/259929

  •  06-07-2019
  •  | 
  •  

Вопрос

По словам Андерса, в C# 4.0 мы собираемся получить динамические типы или объекты, «статический тип которых является динамическим».Это позволит любому разрешению вызова метода происходить во время выполнения, а не во время компиляции.Но будет ли возможность привязать динамический объект к какому-то контракту (и тем самым также получить для него полный интеллектуальный смысл), вместо того, чтобы разрешать любой вызов к нему, даже если вы знаете, что это вряд ли будет действительным?

Т.е.вместо того, чтобы просто

dynamic foo = GetSomeDynamicObject();

иметь возможность приводить или трансформировать его, чтобы ограничить его известным контрактом, например

IFoo foo2 = foo.To<IFoo>;

или даже просто

IFoo foo2 = foo as IFoo;

Не могу найти ничего подобного в существующих материалах по C# 4.0, но это кажется логическим продолжением динамической парадигмы.У кого-нибудь есть дополнительная информация?

Это было полезно?

Решение

Боюсь, я не знаю ничего, что действительно напоминало бы утиное печатание.у меня есть написал в блоге об идее, но я не жду никакой поддержки.Вероятно, было бы не так уж сложно использовать Reflection.Emit для создания класса, который будет генерировать реализацию любого заданного интерфейса, принимая динамический объект в конструкторе и просто передавая ему каждый вызов.Не идеально, но это может быть временным решением.

Другие советы

Это классная идея.Если я вас понимаю, вы описываете/предлагаете возможность CLR, при которой, когда вы пытаетесь привести динамический объект к интерфейсу, она должна посмотреть, какие методы/свойства поддерживает динамический объект, и посмотреть, есть ли у него такие, которые эффективно реализовать этот интерфейс.Затем CLR позаботится о «реализации IFoo» для объекта, так что вы сможете затем привести динамический объект к IFoo.Почти уверен, что это не будет поддержано, но это интересная идея.

Тобиас Херткорн ответил на мой вопрос здесь со ссылкой на него Сообщение блога показывающий пример использования метода Convert() в MetaObject для возврата динамического прокси.Это выглядит очень многообещающе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top