Sdílet prostřednictvím


Konstruktory (průvodce programováním v C#)

Konstruktor je metoda volána modulem runtime, pokud je vytvořena instance třídy nebo struktury. Třída nebo struktura může mít více konstruktorů, které přebírají různé argumenty. Konstruktory umožňují zajistit, aby instance typu byly při vytváření platné. Další informace a příklady naleznete v tématu konstruktory instance a Použití konstruktorů.

Inicializace nové instance je součástí několika akcí. Následující akce se provádějí v následujícím pořadí:

  1. pole instance jsou nastavená na 0. Tato inicializace obvykle provádí modul runtime.
  2. Inicializátory polí se spouštějí. Inicializátory polí v nejodvozenějším typu se spustí.
  3. Inicializátory polí základního typu se spouští. Inicializátory polí, které začínají přímou základní třídou, procházejí každým základním typem až k System.Object.
  4. Konstruktory základních instancí spouštějí. Kterýkoli z konstruktorů instancí, začínající od Object.Object přes každou základní třídu až k přímé základní třídě.
  5. Konstruktor instance spouští. Spustí se konstruktor instance pro typ.
  6. Spouští se inicializátory objektů. Pokud výraz obsahuje jakékoli inicializátory objektů, spustí se po spuštění konstruktoru instance. Inicializátory objektů se spouští v textovém pořadí.

Předchozí akce se provádějí při vytvoření instance pomocí operátoru new. Pokud je nová instance struct nastavena na hodnotu default, jsou všechna pole instance nastavena na hodnotu 0. Prvky pole jsou při vytvoření pole nastaveny na výchozí hodnotu 0 nebo null.

statický konstruktor, pokud existuje, se spustí před tím, než proběhne jakákoli akce konstruktoru instance pro libovolnou instanci typu. Statický konstruktor se spustí maximálně jednou.

Syntaxe konstruktoru

Konstruktor je metoda se stejným názvem jako její typ. Podpis metody může obsahovat volitelný modifikátor přístupu , název metody a jeho seznam parametrů; neobsahuje návratový typ. Následující příklad ukazuje konstruktor pro třídu s názvem 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.
}

Pokud lze konstruktor implementovat jako jeden příkaz, můžete použít člen těla výrazu. Následující příklad definuje Location třídu, jejíž konstruktor má jeden řetězcový parametr s názvem název. Definice těla výrazu přiřadí argument poli locationName.

public class Location
{
   private string locationName;

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

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

Pokud typ k vytvoření instance vyžaduje parametr, můžete pomocí primárního konstruktoru indikovat, že k vytvoření instance typu jsou potřeba jeden nebo více parametrů, jak je znázorněno v následujícím příkladu:

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

Statické konstruktory

Předchozí příklady ukazují konstruktory instancí, které inicializují nový objekt. Třída nebo struktura mohou také deklarovat statický konstruktor, který inicializuje statické členy typu. Statické konstruktory jsou bez parametrů. Pokud nezadáte statický konstruktor pro inicializaci statických polí, kompilátor jazyka C# inicializuje statická pole na výchozí hodnotu uvedenou v Výchozí hodnoty typů jazyka C# článku.

Následující příklad používá statický konstruktor k inicializaci statického pole.

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.
}

Můžete také definovat statický konstruktor s definicí těla výrazu, jak ukazuje následující příklad.

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.
}

Další informace a příklady naleznete v tématu statické konstruktory.

Viz také