C# Language Constructor predeterminado


Ejemplo

Cuando un tipo se define sin un constructor:

public class Animal
{
}

entonces el compilador genera un constructor predeterminado equivalente a lo siguiente:

public class Animal
{
    public Animal() {}
}

La definición de cualquier constructor para el tipo suprimirá la generación del constructor por defecto. Si el tipo se definiera de la siguiente manera:

public class Animal
{
    public Animal(string name) {}
}

entonces solo se puede crear un Animal llamando al constructor declarado.

// This is valid
var myAnimal = new Animal("Fluffy");
// This fails to compile
var unnamedAnimal = new Animal();

Para el segundo ejemplo, el compilador mostrará un mensaje de error:

'Animal' no contiene un constructor que tome 0 argumentos

Si desea que una clase tenga un constructor sin parámetros y un constructor que toma un parámetro, puede hacerlo implementando explícitamente ambos constructores.

public class Animal
{
    
    public Animal() {} //Equivalent to a default constructor.
    public Animal(string name) {}
}

El compilador no podrá generar un constructor predeterminado si la clase extiende a otra clase que no tiene un constructor sin parámetros. Por ejemplo, si tuviéramos una clase Creature :

public class Creature
{
    public Creature(Genus genus) {}
}

entonces Animal definido como class Animal : Creature {} no compilaría.