ReadOnlyAttribute vs PropertyDescriptor.IsReadOnly () - PullRequest
5 голосов
/ 16 апреля 2009

В чем разница между использованием PropertyDescriptor, который возвращает значение для метода IsReadOnly(), и тем, которое связано с ReadOnlyAttribute?

Ответы [ 3 ]

5 голосов
/ 16 апреля 2009

Основное отличие состоит в том, что это позволяет вам получить больше контроля, если вы предоставляете собственную реализацию PropertyDescriptor (через ICustomTypeDescriptor, TypeDescriptionProvider или TypeConverter). Затем вы можете выбрать свою собственную логику для случаев, когда она доступна для записи - например, на основе прав доступа.

Но да; при реализации по умолчанию он сообщит только для чтения о свойствах без установщиков и о свойствах, помеченных ReadOnlyAttribute.

3 голосов
/ 16 апреля 2009

Нет разницы, когда я смотрю на него с помощью Reflector.

Один из производных классов SimplePropertyDescriptor имеет следующий код.


    public override bool IsReadOnly
    {
        get
        {
            return this.Attributes.Contains(ReadOnlyAttribute.Yes);
        }
    }

0 голосов
/ 05 февраля 2013

Просто примечание.

Я потратил день на реализацию ICustomTypeDescriptor для объектов сущностей в моем приложении, чтобы контролировать состояние только для чтения каждой сущности в отдельности.

Таким образом, каждая реализация PropertyDescriptor сохраняла ссылку на объект сущности, из которого она вышла, поэтому свойство IsReadOnly было примерно таким:

public override bool IsReadOnly
{
    get { return _owner.IsReadOnly;}
}

Однако, когда я запускал код, компонент BindingSource считывал набор PropertyDescriptor из метода GetProperties () ICustomTypeDescriptor для каждой записи в наборе, однако, когда он проверял значение IsReadOnly, он проверял только полученный PropertyDescriptor с первой записи.

Полная трата времени !!!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...