Esta página foi útil?
Seus comentários sobre este conteúdo são importantes. Queremos saber sua opinião.
Comentários adicionais?
1500 caracteres restantes
Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Segurança de propriedade da dependência

Propriedades de dependência devem geralmente ser consideradas propriedades publicas. A natureza do sistema de propriedades do Windows Presentation Foundation (WPF) previne a habilidade de realizar garantias de segurança sobre o valor da propriedade de dependência.

Este tópico contém as seções a seguir.

Tipicamente, propriedades de dependência são implementadas com "wrapper" de propriedades common language runtime (CLR) que simplificam a obter e definir a propriedade de uma instância. Mas os wrappers são métodos realmente convenientes que implementam as chamadas GetValue e SetValue estáticas subjacentes que são usadas quando interagindo com propriedades de dependência. Pensando isto de outra maneira, as propriedades expostas como propriedades common language runtime (CLR) que estão suportadas por uma propriedade de dependência ao invés de um campo privado. Mecanismos de segurança aplicados aos wrappers não paralelizam o comportamento do sistema de propriedades e acessos a propriedade de dependência subjacente. Colocar um requisito de segurança em um wrapper só irá prevenir o uso do método conveniente mas não irá prevenir chamadas ao GetValue ou SetValue. Similarmente, colocar níveis de acesso protegido ou privado nos wrappers não fornece nenhuma segurança efetiva.

Se você está escrevendo sua própria propriedade de dependência, você deve declarar os wrappers e o campo identificador DependencyProperty como membros públicos, de modo que quem os chamar não pegue a informação errônea sobre o nível de acesso daquela propriedade (porque seu armazenamento é implementado como uma propriedade de dependência).

Para uma propriedade de dependência personalizada, você pode registrar sua propriedade como uma propriedade de dependência somente leitura, e isso não fornece maneiras efetivas de prevenir uma propriedade de dependência ser definida por qualquer um que não queira guardar uma referência para o DependencyPropertyKey daquela propriedade. Para obter mais informações, consulte Propriedades de dependência somente leitura.

Observação Observação

Declarar um campo identificador DependencyProperty privado não é proibido, e pode plausivelmente sê-lo para ajudar a reduzir o namespace exposto imediato de uma classe personalizada, mas tal propriedade não deve ser considerada "private" no mesmo sentido que a definição de linguagens common language runtime (CLR) define para nível de acesso, por razões descritas na próxima seção.

Não é geralmente útil, e potencialmente induz a erro, declarar um DependencyProperty com qualquer nível de acesso diferente de público. Aquele nível de acesso definido só previne alguém de ser capaz de pegar uma referência para a instância da classe declarante. Mas há vários aspectos do sistema de propriedades que irão retornar um DependencyProperty como o modo de identificar uma propriedade particular enquanto existe em uma instância de uma classe ou uma instância de uma classe derivada, e este identificador ainda é usável em uma chamada SetValue mesmo que o identificador estático original é declarado como não pública. Além disso, métodos OnPropertyChanged virtuais recebem informação de qualquer propriedade de dependência existente que mudaram de valor. Adicionalmente, o método GetLocalValueEnumerator retorna identificadores para qualquer propriedade em instâncias com valores definidos localmente.

ms752808.collapse_all(pt-br,VS.110).gifValidação e Segurança

Aplicar uma demanda ao ValidateValueCallback e esperar a falha na validação em uma falha de demanda para prevenir a propriedade de ser definida não é um mecanismo de segurança adequado. Invalidação de valor definido por ser forçado por meio do ValidateValueCallback podem também ser suprimidos por chamadores maliciosos, se esses chamadores estão operando dentro do domínio da aplicação.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2015 Microsoft