Compartir a través de


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

Un constructor es un método llamado por el tiempo de ejecución cuando se crea una instancia de la clase o de la estructura . Una clase o estructura puede tener varios constructores que toman argumentos diferentes. Los constructores permiten asegurarse de que las instancias del tipo son válidas cuando se crean. 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. Las siguientes acciones tienen lugar en el orden siguiente:

  1. Campos de instancia se establecen en 0. Normalmente, el tiempo de ejecución realiza esta inicialización.
  2. Ejecución de inicializadores de campo. Inicializadores de campo en la ejecución del tipo más derivado.
  3. Ejecución de inicializadores de campo de tipo base. Inicializadores de campo a partir de la base directa a través de cada tipo base para System.Object.
  4. Ejecución de constructores de instancia base. Cualquier constructor de instancia, comenzando por Object.Object y pasando por cada clase base hasta llegar a la clase base directa.
  5. El constructor de instancia ejecuta. El constructor estático para el tipo se ejecuta.
  6. Ejecución de inicializadores de objeto. Si la expresión incluye inicializadores 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 crea una instancia mediante el operador new. Si una nueva instancia de un struct se establece en su valor de default, todos los campos de instancia se establecen en 0. Los elementos de una matriz se establecen en su valor predeterminado de 0 o null cuando se crea una matriz.

El constructor estático , si existe, se ejecuta antes de que se realice alguna de las acciones del constructor de instancia para cualquier instancia del tipo . El constructor estático se ejecuta como máximo una vez.

A partir de C# 14, puede declarar constructores de instancia como miembros parciales. Los constructores parciales deben tener una declaración y una declaración de implementación.

Sintaxis del constructor

Un constructor es un método con el mismo nombre que su tipo. Su firma de método puede incluir 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 un miembro del cuerpo de expresión. En el ejemplo siguiente se define una Location clase cuyo constructor tiene un único parámetro de cadena, 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;
   }
}

Si un tipo requiere un parámetro para crear una instancia, puede usar un constructor principal de para indicar que se requieren uno o varios parámetros para crear una instancia del tipo, como se muestra en el ejemplo siguiente:

public class LabelledContainer<T>(string label)
{
   public string Label { get; } = label;
   public required T Contents 
   { 
      get;
      init;
   }
}

Puede declarar un constructor principal en un partial tipo. Solo se permite una declaración de constructor principal. En otras palabras, solo una declaración del partial tipo puede incluir los parámetros para el constructor principal.

Constructores estáticos

En los ejemplos anteriores se muestran constructores de instancia, que inicializan un nuevo objeto. Una clase o estructura también puede declarar 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 campos estáticos, el compilador de C# inicializa los campos estáticos en su valor predeterminado tal como se muestra en el Valores predeterminados de tipos de C# artículo.

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.

Constructores parciales

A partir de C# 14, puede declarar constructores parciales en una clase o estructura parcial. Cualquier constructor parcial debe tener una declaración de definición y una declaración de implementación. Las firmas de los constructores parciales que declaran e implementan deben coincidir según las reglas de los miembros parciales. La declaración de definición del constructor parcial no puede usar el inicializador de constructor : base() o : this(). Se debe agregar cualquier inicializador de constructor en la declaración de implementación.

Consulte también