Constructores (guía de programación de C#)

Cada vez que se crea una clase o struct, se llama a su constructor. Una clase o struct puede tener varios constructores que toman argumentos diferentes. Los constructores permiten al programador establecer valores predeterminados, limitar la creación de instancias y escribir código flexible y fácil de leer. Para obtener más información y ejemplos, vea Constructores de instancias y Uso de constructores.

Hay varias acciones que forman parte de la inicialización de una nueva instancia. Estas acciones tienen lugar en el orden siguiente:

  1. Campos de instancia se establecen en 0. Normalmente, el tiempo de ejecución lo hace.
  2. Los inicializadores de campo se ejecutan. Inicializadores de campo en la ejecución del tipo más derivado.
  3. Inicializadores de campo de tipo base ejecutan. Inicializadores de campo a partir de la base directa a través de cada tipo base para System.Object.
  4. Los constructores de instancia base se ejecutan. Cualquier constructor de instancia, empezando por Object.Object a través de cada clase base a la clase base directa.
  5. El constructor de instancia se ejecuta. El constructor estático para el tipo se ejecuta.
  6. Los inicializadores de objeto ejecutan. Si la expresión incluye cualquier inicializador de objeto, se ejecutan después de que se ejecute el constructor de instancia. Los inicializadores de objeto se ejecutan en el orden textual.

Las acciones anteriores se realizan cuando se inicializa una nueva instancia. Si se establece una nueva instancia de un struct en su defaultvalor, todos los campos de instancia se establecen en 0.

Si el constructor estático no se ha ejecutado, el constructor estático se ejecuta antes de que se realice ninguna de las acciones del constructor de instancia.

Sintaxis del constructor

Un constructor es un método cuyo nombre es igual que el nombre de su tipo. Su firma del método incluye solo un modificador de acceso opcional, el nombre del método y su lista de parámetros; no incluye un tipo de valor devuelto. En el ejemplo siguiente se muestra el constructor de una clase denominada Person.

public class Person
{
   private string last;
   private string first;

   public Person(string lastName, string firstName)
   {
      last = lastName;
      first = firstName;
   }

   // Remaining implementation of Person class.
}

Si un constructor puede implementarse como una instrucción única, puede usar una definición del cuerpo de expresión. En el ejemplo siguiente se define una clase Location cuyo constructor tiene un único parámetro de cadena denominado name. La definición del cuerpo de expresión asigna el argumento al campo locationName.

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

Constructores estáticos

En los ejemplos anteriores se han mostrado constructores de instancia, que crean un objeto nuevo. Una clase o struct también puede tener un constructor estático, que inicializa los miembros estáticos del tipo. Los constructores estáticos no tienen parámetros. Si no proporciona un constructor estático para inicializar los campos estáticos, el compilador de C# inicializa los campos estáticos en su valor predeterminado, tal como se muestra en el artículo Valores predeterminados de los tipos de C#.

En el ejemplo siguiente se usa un constructor estático para inicializar un campo estático.

public class Adult : Person
{
   private static int minimumAge;

   public Adult(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Adult()
   {
      minimumAge = 18;
   }

   // Remaining implementation of Adult class.
}

También puede definir un constructor estático con una definición de cuerpo de expresión, como se muestra en el ejemplo siguiente.

public class Child : Person
{
   private static int maximumAge;

   public Child(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Child() => maximumAge = 18;

   // Remaining implementation of Child class.
}

Para obtener más información y ejemplos, vea Constructores estáticos.

En esta sección

Consulte también