¿Por qué .Net WPF DependencyProperties tienen que ser miembros estáticos de la clase?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

Aprendiendo WPF hoy en día.Hoy encontré algo nuevo con las propiedades de dependencia de .Net.Lo que traen a la mesa es

  • Soporte para devoluciones de llamada (validación, cambio, etc.)
  • herencia de propiedad
  • Propiedades adjuntas

entre otros.

Pero mi pregunta aquí es ¿por qué es necesario declararlos como estáticos en la clase contenedora?La forma recomendada es agregarles la propiedad 'contenedor' de instancia.Por qué ?

editar:@Matt, pero ¿eso no exige también que el valor de la propiedad también se comparta entre instancias, a menos que, por supuesto, sea un valor derivado?

¿Fue útil?

Solución

Veo 2 razones detrás de ese requisito:

  1. No puedes registrar el mismo DP dos veces.Para cumplir con esta restricción, debe utilizar una variable estática; se inicializará solo una vez, por lo que registrará DP solo una vez.
  2. DP debe registrarse antes de crear cualquier instancia de clase (que use esa base de datos)

Otros consejos

Las propiedades de dependencia son estáticas debido a una optimización clave en WPF:Muchos de los controles en WPF tienen decenas, si no cientos, de propiedades.La mayoría de las propiedades de estas clases están configuradas en su valor predeterminado.Si los DP fueran propiedades de instancia, sería necesario asignar memoria para cada propiedad en cada objeto que cree.Dado que los DP son estáticos, WPF puede administrar el uso de memoria de cada propiedad de manera más efectiva.

La razón por la que debe proporcionar un valor predeterminado para cualquier DP que registre es porque WPF tendrá cuidado de no asignar memoria adicional para su propiedad cuando esté configurada en su valor predeterminado, sin importar cuántos objetos que contengan esa propiedad cree.

Creo que la razón por la que necesita la instancia estática de una propiedad de dependencia es simplemente porque así es como fueron diseñadas.El bit estático contiene todos los metadatos de la propiedad: su valor predeterminado, su tipo de propietario (útil si es una propiedad adjunta), etc., sus métodos de devolución de llamada para cuando cambia, ese tipo de cosas.Tiene sentido almacenar estas cosas estáticamente en todas las instancias de la clase en lugar de por instancia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top