Сделать объект неизменным во время выполнения [C #] - PullRequest
2 голосов
/ 13 июля 2009

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

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

Ответы [ 2 ]

11 голосов
/ 13 июля 2009

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

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

6 голосов
/ 13 июля 2009

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

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

...