Pregunta

ReSharper sugiere cambiar la accesibilidad de un public constructor en un abstract clase a protected, pero no indica el motivo detrás de esto.

¿Puedes arrojar algo de luz?

¿Fue útil?

Solución

Simplemente porque ser pública no tiene sentido en una clase abstracta. Una clase abstracta, por definición, no puede ser instanciada directamente. Sólo puede ser instanciado por una instancia de un tipo derivado. Por lo tanto los únicos tipos que deben tener acceso a un constructor son sus tipos derivados y, por tanto, protegida tiene mucho más sentido que la pública. Se describe con más precisión la accesibilidad.

Otros consejos

Técnicamente no hay ninguna diferencia si haces que 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 efectos.

Entonces, esta elección es sólo una cuestión de estilo:tipo protected para satisfacer a las personas conocedoras de la Orientación a Objetos.


La reflexión por defecto solo incluirá el constructor cuando sea public, pero no puedes llamar a ese constructor de todos modos.

IntelliSense mostrará el public constructor al escribir new, pero no puedes llamar a ese constructor de todos modos.

Los metadatos del ensamblado reflejarán el hecho de que el constructor es público o está protegido.

Es una buena práctica OO.

public abstract class ExampleAbstractClass
{
    protected ExampleAbstractClass()
    {
      // :::
    }
}

Sólo desea que el heredar clases niño tenga acceso al constructor. La única manera de hacerlo es haciendo que el constructor protegido.
Tenga en cuenta, cuando se agrega parámetros a estos constructores, es una discusión totalmente diferente.

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