2. Почему беседа?
Зачем вообще это нужно?
Что мне это дает?
Каковы успешные примеры?
Мы запоминаем только: новое и интересное
3. В физике – явление изменения направления волнового фронта на границе двух сред с
разными свойствами, в котором волновой фронт возвращается в среду, из которой он
пришёл
В философии – форма теоретической деятельности человека, направленную на
осмысление своих действий, всей человеческой культуры и её основ
В программировании – процесс, во время которого программа может отслеживать и
модифицировать собственную структуру и поведение во время выполнения
Термин Reflection
В переводе на Русский язык: отражение
4. Reflection в программировании
Ранние языки программирования изначально поддерживали
рефлексию инструкции как данные, самомодифицирующийся код
С появлением первых, высокоуровневых языков программирования
это свойсво исчезло...
Пока не появились языки программирования с рефлексией встроенной
непосредственно в их систему типов
Брайан Кантвелл Смит в 1982 году в своей докторской дисертации
ввел в обиход термин Reflection:
“Procedural Reflection – allows programs to access and manipulate structural
descriptions of their own operations and structures”
5. Получать информацию о сборках и типах определенных в них
Создавать экземпляры классов
Вызывать методы или обращаться к полям классов
Создавать новый код (Reflection Emit)
Не важно на каком языке Вы пишите (C#, Visual Basic, Ваш выбор...)
И все это можно делать во время исполнения программы!
Reflection в .NET
Namespaces: System.Reflection, System.Type
Позволяет:
6. пакет
SMS
СМС по 2 копейки или история одного
проекта
Если Вы большие и у вас много денег то, любой оператор
готов работать с вами за сущие копейки
А если Вы маленькие, то приходится включать
«соображалку»…
Сервер Дешёвый китайский
смартфон
Сотовый оператор
SMS
Gateway
App
7. У всех есть адрес...
Обращение к SMS Gateway по HTTP протоколу
HttpClient, WebClient и все-все использует System.Uri
Формат URI определен в RFC 3986 и в нем
символ “:” допустим почти везде, но
не все создатели SMS Gateway читают RFC…
В сети без адресов никуда, а в .NET без System.Uri
http://192.168.1.1:8888/send.html?smsto=95156853хх&smsbody=Hi:+Andrew
Hi:+
8. Не стоит быть умнее ваших пользователей…
заменяют “%3A”обратно на “:” даже если
вы их об этом их не просили…
Но парни из Microsoft с этим не согласны и
Hi:+Hi%3A+
9. В чем сила, брат? В Рефлексии!
Reflection
Найдем место, куда можно вклинится
после конвертации “%3A” в “:”
1. Отнаследуемся от DelegatingHandler
2. И скормим его в конструктор HttpClient
Ну, а внутри SendAsync метода и вернем
все «как и было»!