que - ¿Cuál es la utilidad de los constructores públicos en clases abstractas en C#?
que es una clase abstracta c# (3)
Si un constructor público en una clase abstracta solo puede ser llamado por sus clases derivadas, debería ser funcionalmente equivalente a un constructor protegido. ¿Derecha?
¿Hay alguna diferencia en la declaración de un constructor público, en lugar de uno protegido, en una clase abstracta? ¿Para qué lo usarías? ¿Por qué el compilador no se queja?
Absolutamente correcto. Deberías favorecer al constructor protegido.
EDIT: no, el compilador no se queja, pero sí lo hacen herramientas como FxCop (y Code Analysis). Creo que hay algunos trucos de reflexión extraños que puedes hacer con constructores públicos en clases abstractas, pero desde un punto de vista en el que simplemente estás proporcionando funcionalidad de clase base a otros desarrolladores que escriben subclases, apégate al constructor protegido.
Estás en lo correcto. Un constructor público en una clase abstracta es funcionalmente equivalente a un constructor protegido.
Prefiero usar un constructor protegido en este caso.
Si bien, es cierto que el compilador no se quejará de que usted haga esto, el compilador se quejará de intentar generar una instancia de la clase abstracta. Visual Studio también es lo suficientemente inteligente como para no proporcionar Intellisense si intenta crear una instancia de la clase abstracta.
Sí, tienes razón, el constructor prácticamente público no tiene uso en la clase abscract ya que no puedes crearlos.
Sin embargo, el compilador no se quejará porque de esa manera hay tantas cosas inútiles que puede escribir en el contexto de c #, pero no podrá verificar su significado lógico, solo puede verificar las reglas de análisis para las que está configurado.
Y seguro que los creadores de c # se han centrado en crear una gramática de compilación (reglas) que son realmente dañinas y que violan el uso del lenguaje.