Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

Никакой разницы, когда я смотрю на это с помощью Рефлектора.

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


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

Просто записка.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top