Безопасность свойства зависимости
Свойства зависимости, как правило, считаются открытыми. Суть системы свойств Windows Presentation Foundation (WPF) такова, что дать гарантии безопасности о значении свойства зависимости невозможно.
Доступ к программам-оболочкам и свойствам зависимости и их безопасность
Как правило, свойства зависимости реализуются вместе со свойствами CLR программы-оболочки, которые упрощают получение или настройку свойства от экземпляра. Но программы-оболочки — на самом деле, лишь удобные способы реализации базового GetValue и SetValue статические вызовы, которые используются при взаимодействии со свойствами зависимости. Другими словами, свойства предоставляются как свойства CLR, поддерживаемые свойством зависимости, а не закрытым полем. Механизмы безопасности, применяемые к программам-оболочкам, не поддерживают параллели между поведением системы свойств и доступом базового свойства зависимости. Помещение требования безопасности на оболочку помешает только использованию удобного метода, но не блокирует вызовы GetValue или SetValue. Аналогично: размещение защищенного или закрытого уровня доступа в программе-разработчике не обеспечивает эффективную защиту.
При написании собственных свойств зависимости необходимо объявить программы-оболочки и DependencyProperty поле идентификатора как открытые элементы, чтобы вызывающие объекты не получали противоречивую информацию об истинном уровне доступа этого свойства (из-за его хранилища, реализовано как свойство зависимостей).
Для настраиваемого свойства зависимости, можно зарегистрировать свойство как свойство зависимостей только для чтения, и это обеспечивают эффективные способы предотвратить устанавливаемое любым пользователем, не содержит ссылку на свойство DependencyPropertyKey для этого свойства. Дополнительные сведения см. в разделе Свойства зависимостей "только для чтения".
Note
Объявление DependencyProperty закрытого поля идентификатора не запрещено и он может быть использован для уменьшения немедленно предоставляемого пространства имен пользовательского класса, но такое свойство не считается «private», в том же смысле, как CLR язык определения определяют этот уровень доступа, по причинам, описанным в следующем разделе.
Предоставление системы свойств свойствам зависимости
Он обычно не имеет смысла, и это ложная для объявления DependencyProperty как любого уровня доступа, отличный от открытого. Такая настройка уровня доступа просто лишит возможности получить ссылку на экземпляр из объявляющего класса. Но существует несколько аспектов системы свойств, который будет возвращать DependencyProperty как средства для идентификации конкретного свойства, как он существует на экземпляре класса или экземпляре производного класса, и этот идентификатор является по-прежнему можно использовать в SetValue даже вызвать Если исходный статический идентификатор объявляется неоткрытым. Кроме того OnPropertyChanged виртуальные методы получают сведения о любом существующем свойстве зависимости, которое изменило значение. Кроме того GetLocalValueEnumerator метод возвращает идентификаторы для любого свойства в экземплярах с локально заданное значение.
Проверка и безопасность
Применение требований ValidateValueCallback и ожидается сбой проверки при сбое требования для предотвращения задаваемое свойство не является достаточно безопасным механизмом. Реализацию недействительности заданного значения регламентирует ValidateValueCallback может подавляться вредоносные вызывающие объекты, если эти вызывающие объекты работают внутри домена приложения.