Técnicamente, no hace ninguna diferencia si hace el constructor public
en lugar de protected
en una clase abstracta. La accesibilidad/visibilidad del constructor sigue siendo exactamente la misma: la misma clase o clases derivadas. Las dos palabras clave tienen efectos indistinguibles para todos los intentos y propósitos.
Por lo tanto, esta opción es solo una cuestión de estilo: escriba protected
para satisfacer a las personas conocedoras de objetos.
Reflexión de forma predeterminada sólo incluyen el constructor cuando es public
, pero no se puede llamar a ese constructor de todos modos.
IntelliSense mostrará el constructor public
al escribir new
, pero no se puede llamar a ese constructor de todos modos.
Los metadatos del conjunto reflejarán el hecho de que el constructor es público o está protegido.
En otras palabras: ¿por qué querrías contaminar el IntelliSense de otras personas con basura inútil? –
@Andre constructores solo se muestran en intellisense para llamadas nuevas y básicas. Normalmente, las clases abstractas se filtran de las nuevas antes de que se considere la accesibilidad, porque la verificación del resumen es muy fácil y económica. – JaredPar
Entonces, dado esto, ¿no debería el compilador hacer cumplir que las clases abstractas ** no pueden ** tener constructores 'públicos'? – Yuck