Zabezpečení vlastností závislosti

Vlastnosti závislostí by se obecně měly považovat za veřejné vlastnosti. Povaha systému vlastností Windows Presentation Foundation (WPF) zabraňuje schopnost zajistit zabezpečení záruky týkající se hodnoty vlastnosti závislosti.

Přístup a zabezpečení obálky a vlastností závislostí

Vlastnosti závislostí se obvykle implementují spolu s vlastnostmi modulu CLR (Common Language Runtime) "wrapper", které zjednodušují získávání nebo nastavování vlastnosti z instance. Obálky jsou ale opravdu pohodlné metody, které implementují základní GetValue a SetValue statická volání, která se používají při interakci s vlastnostmi závislosti. Když o tom přemýšlíte jiným způsobem, vlastnosti jsou vystaveny jako vlastnosti CLR (Common Language Runtime), které jsou podporovány vlastností závislosti, nikoli privátním polem. Mechanismy zabezpečení použité na obálky nesměrují chování systému vlastností a přístup k základní vlastnosti závislosti. Umístění poptávky po zabezpečení na obálku zabrání pouze použití metody pohodlí, ale nezabrání voláním GetValue nebo SetValue. Podobně umístění chráněné nebo soukromé úrovně přístupu na obálky neposkytuje žádné efektivní zabezpečení.

Pokud píšete vlastní vlastnosti závislostí, měli byste deklarovat obálky a pole identifikátoru DependencyProperty jako veřejné členy, aby volající nedostali zavádějící informace o skutečné úrovni přístupu této vlastnosti (protože se jeho úložiště implementuje jako vlastnost závislosti).

U vlastní vlastnosti závislosti můžete vlastnost zaregistrovat jako vlastnost závislostí jen pro čtení a to poskytuje efektivní způsob, jak zabránit nastavení vlastnosti kýmkoli, kdo nemá odkaz na DependencyPropertyKey danou vlastnost. Další informace naleznete v tématu Vlastnosti závislosti jen pro čtení.

Poznámka:

Deklarace soukromého pole identifikátoru DependencyProperty není zakázáno a může být možné ji použít k omezení okamžitě vystaveného oboru názvů vlastní třídy, ale taková vlastnost by neměla být považována za "soukromou" ve stejném smyslu jako definice jazyka CLR (Common Language Runtime) definují tuto úroveň přístupu z důvodů popsaných v další části.

Expozice systému vlastností závislostí

Obecně to není užitečné a je potenciálně zavádějící, deklarovat jako jakoukoli jinou DependencyProperty úroveň přístupu než veřejnou. Toto nastavení úrovně přístupu brání někomu, aby mohl získat odkaz na instanci z deklarující třídy. Existuje však několik aspektů systému vlastností, které vrátí DependencyProperty jako prostředek identifikace konkrétní vlastnosti, protože existuje u instance třídy nebo odvozené instance třídy, a tento identifikátor je stále použitelný ve SetValue volání, i když je původní statický identifikátor deklarován jako nepublikovaný. OnPropertyChanged Virtuální metody také přijímají informace o jakékoli existující vlastnosti závislosti, která změnila hodnotu. Metoda navíc GetLocalValueEnumerator vrací identifikátory pro libovolnou vlastnost u instancí s místně nastavenou hodnotou.

Ověřování a zabezpečení

Použití poptávky na ValidateValueCallback požadavek a očekávání selhání ověření na vyžádání, aby se zabránilo nastavení vlastnosti, není vhodným mechanismem zabezpečení. Neplatné nastavení hodnoty vynucené prostřednictvím ValidateValueCallback škodlivých volajících může také potlačit, pokud tito volající pracují v doméně aplikace.

Viz také