2012-06-30 24 views
24

¿Es posible anular el constructor de la clase base en la clase derivada?¿Es posible anular un constructor en C#?

En caso afirmativo, ¿cómo se puede lograr y en qué caso de uso sería práctico? ¿Si no, porque no?

+1

Estimado código experto viene de la lógica, solo estoy pidiendo al resion – naval

+4

Otros han respondido bien. En caso de que no conozca la sintaxis de los constructores "chainig", es así: 'MyClass interno (nombre de cadena): base (null, 0, name) {...}'. En este ejemplo, el constructor llama a un constructor base con tres parámetros. –

+0

Vuelva a abrir los votantes: por favor [edite] la pregunta a los estándares habituales antes de votar para reabrir. –

Respuesta

43

No, no puede anular constructores. El concepto no tiene sentido en C#, porque los constructores simplemente no se invocan polimórficamente. Siempre declaras qué clase estás tratando de construir y los argumentos para el constructor.

Los constructores no se heredan del todo, pero todos los constructores de una clase derivada deben encadenarse a otro constructor de la misma clase oa uno de los constructores de la clase base. Si no hace esto explícitamente, el compilador encadena implícitamente al constructor sin parámetros de la clase base (y se produce un error si ese constructor no existe o no es accesible).

+4

"El concepto no tiene sentido, en realidad, los constructores simplemente no se invocan polimórficamente". - En Delphi, lo son. Es una característica muy útil y encuentro las soluciones temporales requeridas en C#, ya sea mediante la reflexión y pasando por las instancias 'Type' comprobadas en tiempo de ejecución, o mediante el suministro de clases separadas de fábrica, bastante engorrosos en comparación. –

+3

@ O.R.Mapper: Bueno, sí, estaba hablando en el contexto de C#. Lo que hacen otros idiomas es irrelevante para esta respuesta. –

+3

En ese caso, sugiero que la respuesta no dice "el concepto no tiene sentido, realmente", ya que suena bastante general. Algo así como "El concepto tendría mucho sentido, pero no es posible utilizar el concepto en C#, ya que los constructores no se invocan polimórficamente allí". podría ser más claro. –

10

No, los constructores no se heredan. No puede anularlos en la clase derivada.
Razón

siempre será llamado Un constructor de base, por cada clase que desciende del objeto, ya que cada clase debe tener al menos un constructor que llama a un constructor de base() (explícita o implícitamente) y cada llamada a un constructor this() debe llamar al constructor base() .

+0

¡Votaron por una explicación relevante y buena! – KillABug

6

No, no puede anular el constructor.

Si echa un vistazo a la sintaxis básica de un constructor, debe tener el mismo nombre que la clase para la que lo está escribiendo.

Digamos que usted escribe un método con el mismo nombre que la clase base (igual que el constructor de la clase base), simplemente será un nuevo método en la clase derivada sin tipo de retorno especificado, que es sintácticamente incorrecto.

+0

Upvoted para una explicación simple. !! – KillABug

Cuestiones relacionadas