Reflection - это мощный API.На базовом уровне отражение позволяет:
- Проверка типов, содержащихся в сборке
- Проверка элементов данного типа, включая метаданные (с помощью атрибутов)
- Динамически вызывайте эти элементы
Если вы используете механизм связывания в WPF для привязки к обычным бизнес-объектам, то вы уже используете отражение.Привязка API, после поиска более формальных механизмов привязки (наследование от DependencyObject
, наличие пользовательского дескриптора типа и т. Д.), Будет использовать отражение, чтобы получить и установить значения свойств вашего бизнес-объекта (или ViewModel).
Например, скажем, у вас есть этот класс
открытый класс Customer {public string Name {get;задавать;}}
И ваш элемент управления (представление) WPF привязывается к коллекции этих Customer
объектов и имеет элемент управления меткой, который привязывается к свойству Name
.Все это определено в XAML, но во время выполнения код будет выглядеть примерно так:
var value = dataObject.GetType().GetProperty("Name").GetValue(dataObject, null);
Это позволит получить значение из связанного объекта - ничего не зная о его типе - и разрешитьконтроль, чтобы отобразить его соответствующим образом.Аналогично:
dataObject.GetType().GetProperty("Name").SetValue(dataObject, "Bob", null);
установит значение свойства этого объекта равным "Bob"
, опять же, ничего не зная о его типе.
Что касается того, как оно может помочь вам непосредственно , варианты использования для этого сравнительно редки.Если вы оказались в положении, когда нужно , чтобы использовать рефлексию для достижения того, что вам нужно, вы можете рассмотреть возможность рефакторинга кода;всегда лучше (в языке со статической типизацией, таком как C #) идти с кодом, который следует за статической типизацией, вместо использования динамического вызова через отражение.Хотя проверка метаданных довольно дешевая, для вызова члена с помощью отражения требуется намного больше обработки, чем обычным способом.
Короткий ответ, честно говоря, если вы спрашиваете, как это может вам помочь, лучше предположить, что - пока - это не может.