Reflection позволяет решать проблемы, которые в противном случае потребовали бы дублирования кода. Если вы обнаружите, что копируете и вставляете код, и не видите, как может помочь шаблон OO, может быть, если вы сможете вызвать их, тогда «команда r» может помочь.
Только шучу. Я не мог понять смысл размышления целую вечность. Если вы можете написать код для выполнения работы, зачем вам вообще нужно использовать рефлексию?
Скажем, у вас много объектов с графическим интерфейсом, таких как формы или объекты таблиц. Он привязывается к бизнес-объекту как Клиент:
public class Customer
{
public string FirstName;
public string LastName;
}
Ваши пользователи не хотят видеть заголовки столбцов «FirstName» или «LastName». Они хотят «Христианское Имя» и Фамилия. Вы не хотите кодировать буквальные строки во всех ваших объектах GUI на случай, если они передумают на «Имя» и «Фамилия отца» (я знаю, пример дерьма).
Если вы определяете свой класс с помощью атрибутов:
public class Customer
{
[Description("Christian Name")]
public string FirstName;
[Description("Surname")]
public string LastName;
}
Вы можете использовать отражение, чтобы вытащить имена столбцов. Если вам нужно изменить способ, которым все ваши объекты графического интерфейса описывают объект клиента, вы теперь делаете это в одном месте.
Мне не известны какие-либо анти-паттерны. Мой совет - прыгнуть и попробовать. Вы начнете видеть все виды способов, которыми рефлексия дает вам элегантное решение. Производительность часто указывается в качестве причины, по которой не следует использовать повторное сравнение. С улучшением производительности возникают накладные расходы, но я бы не стал их учитывать, если только вы не докажете, что эти издержки наносят ущерб алгоритму, который вам нужен.