Каковы ограничения Динамического Времени выполнения Языка в.NET 4.0?

Однажды созданный, не может быть изменен. Рассмотрим класс, экземпляр которого может быть использован в качестве ключа для хеш-таблицы или аналогичного. Ознакомьтесь с лучшими практиками Java.

6
задан Marc Gravell 20 June 2009 в 09:27
поделиться

1 ответ

Вы можете использовать анонимные функции, вам просто нужно сначала привести их:

dynamic list = new List<string>() { "10", "20" };
dynamic converted = list.ConvertAll((Func<string, int>) (x => int.Parse(x)));

То же самое верно и для преобразований групп методов:

foo.Click += (EventHandler) MyClickHandler;

Другие ограничения, которые я встречены до сих пор:

  • Статические методы и конструкторы не могут быть динамическими с точки зрения типа, но могут быть динамическими с точки зрения аргументов
  • Вы не можете использовать dynamic в ограничении типа
  • Вы не можете использовать dynamic в качестве аргумента типа в интерфейсе для объявления класса, но вы можете использовать его в качестве аргумента типа для базовый класс, то есть

     class Invalid: IEnumerable 
    class Valid: List 
    
  • Методы расширения не обнаруживаются во время выполнения (но вы можете вызвать статический метод напрямую с динамическими аргументами)

  • В 4.0b1 есть ошибка, из-за которой вы не можете преобразовать из dynamic [] в IEnumerable - это будет исправлено в выпуске.
  • Вы не можете использовать dynamic в качестве базового класса

(обратите внимание, что это ограничения C # 4.0 так же, как и самого DLR. У меня сложилось впечатление, что вы имели в виду именно это.)

11
ответ дан 9 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: