2009-07-13 3 views
2

Есть ли способ (используя Reflection, я надеюсь), что я могу сделать экземпляр объекта неизменным вместе со всеми его публичными объектами? У меня есть класс из чужой базы кода (без источника), который мне нужно использовать, и я в основном хочу, чтобы исключение вызывалось, если какой-либо фрагмент кода пытается вызвать публичный сеттер в этом классе после его создания.Сделать объект неизменным в Runtime [C#]

Примечание. Я не хочу создавать объект-оболочку вокруг класса, чтобы реализовать это. Я лентяй.

ответ

6

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

Но отражение может быть использовано для нарушения неизменности типа. Например, можно установить свойства, отмеченные с помощью readonly через отражение, после запуска конструктора.

+0

+1 Отмечая, что это даже не возможно - я больше обращаюсь к мотивам о том, что осуществимость! –

11

Мне трудно поверить, что вы готовы ввести код отражения, чтобы сделать что-то, что можно просто решить с помощью класса-оболочки.

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

+1

+1 - согласовано. Я бы рекомендовал обертку по простой причине: Ясность. –

+0

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

+2

+1 для улучшения способов достижения такого поведения. – JaredPar

Смежные вопросы