2008-12-16 17 views
5

Ayer pensé que sería bueno implementar mi propio disparador en una aplicación WPF. Creé una clase MyTrigger que heredó TriggerBase. TriggerBase es una clase abstracta pública. Entonces la herencia no es un problema. Pero los constructores dentro de esta clase están marcados como internos. El compilador arroja un error porque no es un constructor válido. ¿Por qué alguien crea una clase pública pero marca los constructores como internos?constructor interno

Respuesta

9

Si desea que la clase sea visible, pero solo permita que se subclassed dentro de su propio conjunto. Las subclases pueden tener constructores públicos, o se puede acceder a ellas con una fábrica.

No puedo comentar si esa es una buena decisión de diseño para TriggerBase en WPF, pero al menos es razonable en algunas situaciones.

5

Una razón por la que podría pensar es que la creación real de nuevas instancias sería manejada por otra clase pública en el mismo ensamblado. Esto obligaría a crear la instancia a través de esta otra clase, posiblemente algún tipo de implementación de patrón de fábrica.

2

Es público porque se usa como una clase base para los desencadenantes que se envían con WPF (Trigger, MultiTrigger, EventTrigger, DataTrigger, etc.). Si no fuera público, entonces no podría marcar estas clases como públicas.

Los constructores son internos porque no tienen la intención de que usted lo use. Supongo que debes derivarte de una de las clases mencionadas anteriormente.