Примеры использования для отражения

Это также будет работать с несколькими упоминаниями.

var str = "Hello, @John how's going on. Greedings to @Bob.";
    var regex = /[@]\S[^. ]*/g;

    var matches = str.match(regex)
    var split = str.split(regex);

    for(var i = 0; i<matches.length;i++){
        document.body.appendChild(document.createTextNode(split[i]));

        var a = document.createElement('a');
        a.appendChild(document.createTextNode(matches[i]));
        a.title = "my title text";//text you can see onHover
          a.href = "http://example.com/users/"+matches[i].split('@')[1];//link to user
        document.body.appendChild(a);
    }
    document.body.appendChild(document.createTextNode(split[split.length-1]));

21
задан Eli Courtwright 8 September 2008 в 13:46
поделиться

9 ответов

Я могу перечислить следующее использование для отражения:

  • Позднее связывание
  • безопасность (анализируют код из соображений безопасности)
  • Анализ кода
  • Динамический контроль типов (утиный ввод не возможен без отражения)
  • Метапрограммирование

Некоторые реальные использования отражения от моего личного опыта:

  • Разработал сменную систему на основе отражения
  • Используемая модель
  • аспектно-ориентированного программирования Выполненный статический анализ кода
  • Используемые различные платформы Внедрения зависимости
  • ...

Отражение является хорошей вещью :)

19
ответ дан 29 November 2019 в 21:06
поделиться

Я использовал отражение для получения информации существующего метода для исключений, входа, и т.д.

string src = MethodInfo.GetCurrentMethod().ToString();
string msg = "Big Mistake";
Exception newEx = new Exception(msg, ex);
newEx.Source = src;

вместо

string src = "MyMethod";
string msg = "Big MistakeA";
Exception newEx = new Exception(msg, ex);
newEx.Source = src;

Это просто легче для скопировать/вставить наследования и генерации кода.

4
ответ дан 29 November 2019 в 21:06
поделиться

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

3
ответ дан 29 November 2019 в 21:06
поделиться

Существует партия времен, которых Вы хотите динамично инстанцировать и работать с объектами, где тип не известен до времени выполнения. Например, с ИЛИ-КАРТОПОСТРОИТЕЛЯМИ или в сменной архитектуре. Насмешка платформ использует его, если Вы хотите записать библиотеку входа и динамично хотеть исследовать тип и свойства исключений.

, Если я думаю немного дольше, что могу, вероятно, придумать больше примеров.

2
ответ дан 29 November 2019 в 21:06
поделиться

Я использовал отражение в C#, когда был некоторый внутренний или закрытый метод в платформе или сторонней библиотеке, к которой я хотел получить доступ.

(Правовая оговорка: это - не обязательно лучшая практика, потому что частные и внутренние методы могут быть изменены в более поздних версиях. Но это работало на то, в чем я нуждался.)

1
ответ дан 29 November 2019 в 21:06
поделиться

Ну, на статически типизированных языках Вы хотели бы использовать отражение любое время, необходимо сделать что-то "динамическое". Это пригождается для инструментов целей (сканирующий членов объекта). В Java это используется в JMX и динамических прокси вполне немного. И существуют тонны одноразовых случаев, где это - действительно единственный способ пойти (в значительной степени каждый раз, когда необходимо сделать что-то, что компилятор не позволит Вам сделать).

1
ответ дан 29 November 2019 в 21:06
поделиться

Я нахожу отражение очень полезным, если входные данные (как xml) имеют сложную структуру, которая легко отображается на экземплярах объектов, или мне нужно некоторый, "" отношения между экземплярами.

, Поскольку отражение относительно легко в Java, я иногда использую его для простых данных (карты значения ключа), где у меня есть маленький фиксированный набор ключей. Одна одна рука, которую просто определить, допустим ли ключ (если класс имеет метод set setKey (Строковые данные)), с другой стороны, я могу изменить тип (текстовых) входных данных и скрыть преобразование (например, простой бросок к интервалу в getKey ()), таким образом, остальная часть приложения может полагаться на правильно введенные данные. Если тип некоторой пары значения ключа изменяется для одного объекта (например, интервал формы для плавания), я только должен изменить его в объекте данных и его пользователях, но не должен иметь в виду для проверки синтаксического анализатора также. Это не могло бы быть разумным подходом, если производительность является проблемой...

2
ответ дан 29 November 2019 в 21:06
поделиться

Пишущие диспетчеры. Отражающая поддержка Python скрученного использования диспетчеризировать XML-RPC и вызовы SOAP. RMI использует отражательный API Java для отправки.

парсинг Командной строки. Создание объекта конфигурации на основе параметров командной строки, которые передаются в.

При записи модульных тестов, может быть полезно использовать отражение, хотя главным образом я использовал это для обхода модификаторов доступа (Java).

1
ответ дан 29 November 2019 в 21:06
поделиться

Я обычно использую отражение для отладки. Отражение может более легко и более точно отобразить объекты в системе, чем выбор операторов печати. На многих языках, которые имеют первоклассные функции, можно даже вызвать функции объекта, не пишущий специальный код.

существует, однако, способ сделать то, что Вы хотите (редактор). Используйте хеш-таблицу. Сохраните поля, включенные против имени поля.

, Если Вы действительно хотели, Вы могли бы затем создать стандарт, Добираются/Функции множества или создают макросы, которые делают это на лету. #define GetX() Get("X") вид вещи.

Вы могли даже реализовать свое собственное несовершенное отражение тот путь.

Для опытного пользователя, если можно скомпилировать код, может быть возможно позволить выходному поколению отладки и использованию это выполнить отражение.

1
ответ дан 29 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

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