Я использую отражение для копирования данных между объектами, которые реализуют один и тот же интерфейс, все работает нормально, но перед развертыванием в производство я хотел спросить: есть ли какие-то причины, почему я должен избегать этого?Есть ли недостатки в использовании отражения для копирования объектов?
Моя предыдущая реализация с жестко закодированными свойствами не смогла обнаружить дополнения к интерфейсу и не позволила мне или моей команде ошибочно скопировать свойство на другой тип того же типа.
Кроме того, я кэширую по статическому словарю свойства по типу, имеет ли это какое-либо преимущество или я просто удваиваю словарь CLR?
Какая часть меньше? Тот, где я получаю свойства интерфейса (он выполняется один раз) или тот, где я делаю setvalue (getvalue())? Я думаю, что я напишу некоторые тесты ... –
Можно использовать Reflection для создания разумно эффективного кода. Это будет не так быстро, как прямая отправка, но может работать прилично. Большая проблема, которую я должен описать более подробно, - вторая. Бывают случаи, когда необходимо, чтобы контракт на интерфейс указывал: «Любая законная реализация этого интерфейса должна иметь статический метод, называемый X с сигнатурой Y», а для вспомогательного метода такого интерфейса использовать Reflection для вызова такого метода. Существование таких методов обычно было бы «детальностью реализации», а не частью контракта на интерфейс ... – supercat
... но иногда полезно иметь общий метод, который принимает тип «T», ограниченный, например, 'IConstructableFrom' поэтому код с 'String' может преобразовать его в' T' из него. В общем, однако, интерфейсные контракты должны избегать указания того, как должны работать вещи с Reflection. Это нехорошо семантически, даже если производительность будет приемлемой. –
supercat