2009-11-09 2 views
1

Возьмем следующее свойство:Как сделать недвижимость по-настоящему доступной для чтения?

public string Foo 
{ 
    get; 
    private set; 
} 

С помощью отражения, я все еще могу установить значение этого свойства из-за пределов имущего класса. Есть ли способ предотвратить это? Удаление адаптера установки не является вариантом, так как это должно быть WCF.

+1

Не могли бы вы сделать исключение в своем сеттере? Я использовал эту стратегию, чтобы предотвратить использование рефлексии для повторного создания объекта singleton (в Java). –

ответ

5

Джон Скит says:

Вы не можете (AFAIK) остановка отражение используется в ситуации, когда абонент имеет «полное доверие». Если они работают с полным доверием , тогда некоторые вещи о отражении (если не все) автоматически отключены, я верю - однако, если это означает, что другие люди от вызывают некоторый код, вы не можете их предотвратить от запуска вашего кода с полное доверие, если вы не контролируете свою коробку в первую очередь.

+1

[ReflectionPermission (SecurityAction.Deny, Flags = ReflectionPermissionFlag.AllFlags)] - это все, о чем я могу думать, но это может не очень помочь –

4

Действительно уродливым решением было бы использовать класс StackTrace, чтобы убедиться, что только методы из вашего собственного класса вызывают сеттер.

2

Вы можете сфотографировать код. Это затруднит его размышление.

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

  • Нет связанных вопросов^_^