Что такое Отражение?

Итак, в Swift мы все еще можем перейти по ссылке. Это позволяет туда, где наши параметры являются изменяемыми, потому что в случае по умолчанию, таком как ваш, они являются let переменными и не являются изменяемыми.

То, что мы можем сделать, это,

attackTarget(attacker: alexRider, enemy: &enemyTwo)

, а также,

func attackTarget(attacker player: Player, enemy target: inout Enemy) {

Вы можете видеть здесь, inout аналогичен тому, что передается по ссылке переменная в C, мы просто должны сообщить об этом компилятору Swift. Это позволит вашей переменной изменять собственные переменные.

6
задан hangy 2 November 2008 в 01:14
поделиться

5 ответов

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

Как пример:

myobject.GetType().GetProperty("MyProperty").SetValue(myobject, "wicked!", null)
3
ответ дан 8 December 2019 в 17:31
поделиться

Отражение состоит в том, как можно исследовать внутренности различных типов, обычно не имея доступа (т.е. частный, защищенный, и т.д. участники).

Это также используется, чтобы динамично загрузить DLL и получить доступ к типам и методам, определенным в них, статически не компилируя их в Ваш проект.

Вкратце: Отражение является Вашим инструментарием для заглядывания под капотом части кода.

Относительно того, почему Вы использовали бы его, это обычно используется только в сложных ситуациях или анализе кода. Другое общее использование для загрузки предварительно скомпилированных плагинов в Ваш проект.

8
ответ дан 8 December 2019 в 17:31
поделиться

Это позволяет внутренностям объекта быть отраженными к внешнему миру (код, который использует, сказал что объекты).

Практическое применение на статически типизированных языках как C# (и Java) должно позволить вызов методов/участников во времени выполнения через строку (например, название метода - возможно, Вы не знаете название метода, который Вы будете использовать во время компиляции).

В контексте динамических языков я не услышал термин как очень (как обычно, Вы не волнуетесь о вышеупомянутом), другой затем, возможно, для итерации через список методов/участников и т.д...

2
ответ дан 8 December 2019 в 17:31
поделиться

Отражение является средствами .NET управлять или извлечь информацию блока, класса или метода во время выполнения. Например, можно создать класс во времени выполнения, включая он - методы. Как указано монооксидом, отражение используется для динамичной загрузки блока как плагинов или заранее случаев, это используется для создания предназначения компилятора .NET .NET, как IronPython.

Обновленный: можно обратиться к теме на метапрограммировании и его связанных темах для получения дополнительной информации.

1
ответ дан 8 December 2019 в 17:31
поделиться

При создании любого блока в.NET (ASP.NET, Windows Forms, Командная строка, библиотека классов и т.д.), много метаданных "таблицы определения" также создаются в информации хранящего блока о методах, полях и типах, соответствующих типам, полям и методам, которые Вы записали в своем коде.

Классы в Системе. Пространство имен отражения в.NET позволяет Вам перечислять и межпоело по этим таблицам, предоставив "объектную модель" Вам, чтобы запросить и получить доступ к объектам в этих таблицах.

Одно общее использование Отражения предоставляет расширяемость (плагины) Вашему приложению. Например, Отражение позволяет Вам загружать блок динамично из пути к файлу, запрашивать его типы для определенного полезного типа (такие как Интерфейс, который Ваше приложение может назвать), и затем на самом деле вызовите метод на этот внешний блок.

Пользовательские атрибуты также идут рука об руку с отражением. Например, платформа поблочного тестирования NUnit позволяет Вам указывать на тестирование методы класса и методы тестирования путем добавления [Тест] {TestFixture] приписывает собственному коду.

Однако затем исполнитель тестов NUnit должен использовать Отражение, чтобы загрузить Ваш блок, искать все случаи методов, которые имеют тестовый атрибут и затем на самом деле называют Ваш тест.

Это упрощает его много, однако это дает Вам хороший практический пример того, где Отражение важно.

Отражение, конечно, мощно, однако быть изделием, что оно позволяет Вам полностью игнорировать фундаментальное понятие модификаторов доступа (инкапсуляция) в объектно-ориентированном программировании.

Например, можно легко использовать его, чтобы получить список Закрытых методов в классе и на самом деле назвать их. Поэтому необходимо думать тщательно о том, как и где Вы используете его, чтобы не обходить инкапсуляцию и очень сильно связывать (плохой) код.

0
ответ дан 8 December 2019 в 17:31
поделиться
Другие вопросы по тегам:

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