Sdílet prostřednictvím


Použití konstruktorů (Průvodce programováním v C#)

Když třídy nebo struktury je vytvořena, se nazývá jeho konstruktoru.Konstruktory nemají stejný název jako třídy nebo struktury a obvykle inicializují datových členů nového objektu.

V následujícím příkladu třída s názvem Taxi je definován pomocí jednoduchého konstruktoru.Tato třída je potom konkretizovány nové operátor.Taxi Je vyvolán konstruktor new operátor ihned po paměti alokované pro nový objekt.

public class Taxi
{
    public bool isInitialized;
    public Taxi()
    {
        isInitialized = true;
    }
}

class TestTaxi
{
    static void Main()
    {
        Taxi t = new Taxi();
        Console.WriteLine(t.isInitialized);
    }
}

Konstruktor bez parametrů, nazývá výchozí konstruktor.Výchozí konstruktory jsou vyvolány při vytváření instance objektu pomocí new operátor a žádné argumenty jsou k dispozici na new.Další informace naleznete v tématu Konstruktory instancí (Průvodce programováním v C#).

Pokud je třída statické, třídy bez konstruktory jsou uvedeny veřejný výchozí konstruktor pomocí kompilátoru jazyka C#, chcete-li povolit vytváření instance třídy.Další informace naleznete v tématu Statické třídy a jejich členové (Průvodce programováním v C#).

Třídu můžete zabránit vytváření instancí provedením konstruktor soukromou, takto:

class NLog
{
    // Private Constructor: 
    private NLog() { }

    public static double e = Math.E;  //2.71828...
}

Další informace naleznete v tématu Soukromé konstruktory (Průvodce programováním v C#).

Konstruktory pro struktury typy vypadat konstruktory tříd, ale structs nemůže obsahovat explicitní výchozí konstruktor, protože jeden je automaticky poskytovány kompilátorem.Tento konstruktor inicializuje každé pole v struct na výchozí hodnoty.Další informace naleznete v tématu Tabulka výchozích hodnot (Referenční dokumentace jazyka C#).Avšak tento výchozí konstruktor je vyvolána pouze v případě struct je vytvořena s new.Například tento kód používá výchozí konstruktor pro Int32, tak, aby jistotu, že je inicializován na celé číslo:

int i = new int();
Console.WriteLine(i);

Následující kód však způsobí chybu kompilátoru, protože nepoužívá new, a protože se pokusí použít objekt, který nebyl inicializován:

int i;
Console.WriteLine(i);

Případně objekty založené na structs (včetně všechny předdefinované číselné typy) může být inicializován nebo přiřazena a použita jako v následujícím příkladu:

int a = 44;  // Initialize the value type...
int b;
b = 33;      // Or assign it before using it.
Console.WriteLine("{0}, {1}", a, b);

Proto volání výchozího konstruktoru pro typ hodnoty není vyžadováno.

Obě třídy a structs lze definovat konstruktory, které přijímají parametry.Konstruktory, které přijímají parametry musí být volána prostřednictvím new příkaz nebo základní prohlášení.Třídy a structs můžete také definovat více konstruktorů a ani je nutné definovat výchozí konstruktor.Příklad:

public class Employee
{
    public int salary;

    public Employee(int annualSalary)
    {
        salary = annualSalary;
    }

    public Employee(int weeklySalary, int numberOfWeeks)
    {
        salary = weeklySalary * numberOfWeeks;
    }
}

Do této třídy lze vytvořit pomocí některého z následujících příkazů:

Employee e1 = new Employee(30000);
Employee e2 = new Employee(500, 52);

Můžete použít konstruktor base Chcete-li volat konstruktor základní třídy.Příklad:

public class Manager : Employee
{
    public Manager(int annualSalary)
        : base(annualSalary)
    {
        //Add further instructions here.
    }
}

V tomto příkladu volání konstruktoru základní třídy před provedením blok pro konstruktor.base s nebo bez parametrů, můžete použít klíčové slovo.Všechny parametry konstruktoru může sloužit jako parametry pro base, nebo jako součást výrazu.Další informace naleznete v tématu base (Referenční dokumentace jazyka C#).

V odvozené třídě, je-li konstruktor základní třídy není explicitně vyvolán s použitím base , klíčové slovo, výchozí konstruktor, pokud existuje, se nazývá implicitně.To znamená, že tato prohlášení konstruktor účinně stejné:

public Manager(int initialdata)
{
    //Add further instructions here.
}
public Manager(int initialdata)
    : base()
{
    //Add further instructions here.
}

Je-li základní třídy neposkytuje výchozí konstruktor, odvozené třídy musí provést explicitní volání konstruktoru základní pomocí base.

Konstruktor lze volat jiný konstruktor ve stejném objektu pomocí této klíčové slovo.Stejně jako base, this lze použít s nebo bez parametrů a jsou k dispozici jako parametry pro všechny parametry v konstruktoru this, nebo jako součást výrazu.Například druhý konstruktor v předchozím příkladu může být přepsán pomocí this:

public Employee(int weeklySalary, int numberOfWeeks)
    : this(weeklySalary * numberOfWeeks)
{
}

Použití this klíčové slovo v předchozím příkladu způsobí, že tento konstruktor pro volání:

public Employee(int annualSalary)
{
    salary = annualSalary;
}

Konstruktory mohou být označeny jako veřejné, private, chráněné, vnitřní, nebo protectedinternal. Tyto modifikátory přístupu definovat, jak vytvořit třídu uživatele třídy.Další informace naleznete v tématu Modifikátory přístupu.

Konstruktor lze deklarovat statická pomocí statické klíčové slovo.Statické konstruktory jsou volány automaticky, těsně před všechny statické položky jsou přístupné a obecně slouží k inicializaci třídy statické členy.Další informace naleznete v tématu Statické konstruktory.

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také

Referenční dokumentace

Třídy a struktury (Průvodce programováním v C#)

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

Destruktory (Průvodce programováním v C#)

Koncepty

Průvodce programováním v C#