Отражение позволяет любому классу CLR исследовать и манипулировать свойствами и полями других классов CLR, но необязательно делать это разумно.Класс может скрыть значение свойств и полей или защитить их от несанкционированного доступа, если они неявным образом зависят друг от друга, от статических полей, информации об ОС и т. Д.
Например,класс может хранить в некоторой переменной зашифрованную версию дескриптора ОС для своего главного окна.Используя отражение, другой класс мог видеть эту переменную, но, не зная метода шифрования, он не мог определить окно, к которому он принадлежал, или заставить переменную ссылаться на другое окно.
Я видел классы, которые утверждают, что действуюткак «универсальные сериализаторы»;они могут быть очень полезны, если применяются к чему-то вроде класса контейнера для хранения данных, в котором отсутствует атрибут «сериализуемый», но в остальном все просто.Они будут издавать гоблиды, если их применять к любому классу, создатель которого стремился затенить вещи.