2009-11-05 14 views

Respuesta

21

Absolutamente correcto. Deberías favorecer al constructor protegido.

EDITAR: no el compilador no se queja, pero las herramientas como FxCop (& Code Analysis) sí. 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 solo estás proporcionando funcionalidad de clase base a otros desarrolladores que escriben subclases, quédate con el constructor protegido.

+0

de acuerdo. Esto es tener más detalles: http://stackoverflow.com/questions/2700256/why-cant-create-object-of-an-abstract-class –

2

Sí, tienes razón, el constructor prácticamente público no tiene uso en la clase de 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 contexto de C#, pero no podrá verificar su significado lógico, solo puede verificar las reglas de análisis para las cuales está establecido .

Y los creadores de C# se han centrado en crear gramática de compilación (reglas) que son realmente dañinas y violan el uso del lenguaje.

4

Estás en la correcta. 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 lo haga, el compilador se quejará de intentar generar una instancia de la clase abstracta. Visual Studio es lo suficientemente inteligente como para no proporcionar Intellisense si intenta crear una instancia de la clase abstracta.

+0

Hay algunos casos de borde con reflexión que se pueden simplificar haciendo constructores de clase abstracta público ... pero son excepcionalmente raros. En general, estoy de acuerdo en que los constructores en clases abstractas deben estar protegidos (o privados si son invocados por otras sobrecargas de constructor). – LBushkin

Cuestiones relacionadas