É aceitável “emprestar” propriedades de dependência das classes não relacionadas?

StackOverflow https://stackoverflow.com/questions/227030

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu estou escrevendo uma classe que presta algum conteúdo no WPF, e eu quero dar ao usuário controle sobre como o conteúdo é processado. A prestação é principalmente acariciando linhas, então eu decidi olhar para a classe System.Windows.Forms.Shapes.Line para ter uma idéia de quais propriedades eu poderia querer implementar. Isso me levou a implementar a maioria das propriedades StrokeXXXX, e é um monte de drudgework uma vez que cada requer metadados para afetar a prestação.

Um colega sugeriu que eu apenas "emprestar" as propriedades de forma como este:

Shape.StrokeThicknessProperty.AddOwner(typeof(MyType));

Esta parece ser uma boa idéia. Pensei que fazendo isso eu perderia a capacidade de coerção conjunto e propriedade mudou retornos de chamada, mas parece que a sobrecarga que leva um PropertyMetadata permite isso. A única desvantagem que vejo é se a implementação de mudanças de forma, ele vai afetar a nossa classe, mas eu sou incerto como muitas vezes eu espero que as interfaces .NET para mudar significativamente.

O que você acha? É este um atalho decente para definir propriedades quando uma classe bem conhecida tem o comportamento desejado e uma interface estável, ou uma maneira infalível para brincar com o fogo, enquanto em um banho de gasolina?

Foi útil?

Solução

É muito seguro e útil para emprestar PD ... Leia o post seguinte pelo Dr. WPF sobre o assunto!

Aqui está algumas das "dicas" que fornecem:

  • Você deve sempre saber o que a classe proprietário faz com qualquer propriedade que você pedir.
  • Você deve prestar atenção aos valores padrão e herança. Às vezes você precisa de uma propriedade bool com um valor padrão de verdadeiros ... outras vezes você pode querer um valor padrão de false. Às vezes você precisa de uma propriedade que herda ... outras vezes você faz explicitamente não quer herança. (Contracção uma propriedade como TextElement.FontSize poderia realmente estragar as coisas mais baixo na árvore.)
  • A classe proprietário pode, por vezes, definir um PropertyChangedCallback que irá interferir com a sua capacidade de usar a propriedade como desejar. Sempre sabe o que a classe proprietário faz com a propriedade.
  • A classe proprietário pode fornecer uma rotina de validação para a propriedade que o impede de entrar o valor que você deseja especificar. Mais uma vez, sempre sabe o que a classe proprietário faz com a propriedade. A propriedade pode ser registrada em uma maneira que faz com que seja caro perf-wise, como FixedPage.Bottom que invalida o pai de organizar qualquer momento as alterações de propriedade sobre um objeto. Às vezes você pode querer explicitamente esse comportamento ... outras vezes ela só vai desnecessariamente causa passes de layout. Mais uma vez, sempre sabe o que a classe proprietário faz com a propriedade.
  • Se você usar uma propriedade em um cenário onde a própria estrutura está tentando usar a propriedade (como TextSearch.TextPath em um ItemsControl), que são susceptíveis de encontrar-se na disputa com o quadro.

Outras dicas

Eu tinha acabado de continuar a criar minhas próprias propriedades de dependência, pessoalmente. Realmente não é muito trabalho extra, e então você não precisa se preocupar com qualquer um dos possíveis ressalvas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top