Скачать презентацию dynamic magic Александр Ложкин ГК Экстрим Скачать презентацию dynamic magic Александр Ложкин ГК Экстрим

Dynamic is not magic. Мост между статической и динамической типизацией.pptx

  • Количество слайдов: 23

dynamic != magic Александр Ложкин ГК Экстрим dynamic != magic Александр Ложкин ГК Экстрим

План доклада 1) 2) 3) 4) 5) dynamic keyword; metadata; пара слов о DLR; План доклада 1) 2) 3) 4) 5) dynamic keyword; metadata; пара слов о DLR; dynamic vs reflection; примеры использования; 2

dynamic keyword 3 dynamic keyword 3

dynamic keyword 4 dynamic keyword 4

dynamic keyword 5 dynamic keyword 5

dynamic keyword object -> System. Object int -> System. Int 32 dynamic -> System. dynamic keyword object -> System. Object int -> System. Int 32 dynamic -> System. Dynamic… а вот и нет dynamic = System. Object + метаданные. dynamic – ключевое слово для компилятора: • указывает на необходимость сгенерировать код для взаимодействия с DLR; • скрывает цель/результат вызова от компилятора, т. е. указывает на необходимость отложить компиляцию до runtime. 6

dynamic metadata 7 dynamic metadata 7

dynamic metadata 8 dynamic metadata 8

dynamic metadata 9 dynamic metadata 9

DLR 10 DLR 10

DLR 11 DLR 11

dynamic vs reflection 12 dynamic vs reflection 12

dynamic vs reflection 13 dynamic vs reflection 13

dynamic vs reflection • Плюсы dynamic: • понятный код, проще поддерживать; • поддержка со dynamic vs reflection • Плюсы dynamic: • понятный код, проще поддерживать; • поддержка со стороны средств разработки; • возможность использовать все средства языка в «естественной» форме; • выше производительность. • Минусы dynamic: • нельзя нарушать области видимости; • не подходит для «исследования» объектов и типов. 14

Пример #1 Работа с конфигурацией 15 Пример #1 Работа с конфигурацией 15

Пример #2 Анонимные классы 16 Пример #2 Анонимные классы 16

Пример #3 Работа со «сторонним» кодом 17 Пример #3 Работа со «сторонним» кодом 17

Пример #4 Multiple dispatch Задача: выбрать метод (во время выполнения) среди перегрузок в зависимости Пример #4 Multiple dispatch Задача: выбрать метод (во время выполнения) среди перегрузок в зависимости от типа аргумента. Варианты решения: • type-switch (if-else-if-else); • словарь «тип-делегат» ; • рефлексия; • каноничный посетитель (Accept и Visit). 18

Пример #4 Multiple dispatch 19 Пример #4 Multiple dispatch 19

Пример #4 Multiple dispatch 20 Пример #4 Multiple dispatch 20

Пример #4 Multiple dispatch 21 Пример #4 Multiple dispatch 21

Заключение • • • C# по прежнему строго типизированный язык; главный плюс dynamic – Заключение • • • C# по прежнему строго типизированный язык; главный плюс dynamic – унификация и скрытие типа объекта; dynamic позволяет писать более эффективный код; dynamic производительней и понятнее рефлексии; dynamic следует использовать осторожно; используйте dynamic для реализации паттернов динамически типизированных языков. 22

Благодарю за внимание! Контакты: syberside@gmail. com, @syberside Исходники: github. com/syberside/Dynamic. Is. Not. Magic Вопросы, Благодарю за внимание! Контакты: syberside@gmail. com, @syberside Исходники: github. com/syberside/Dynamic. Is. Not. Magic Вопросы, комментарии… помидоры?