Sdílet prostřednictvím


Pomocí konstruktorů (Příručka programování C#)

Konstruktory jsou třídy metod, které jsou spouštěny při vytvoření objektu daného typu.Konstruktory mají stejný název jako třída a obvykle inicializace datové členy nového objektu.

V následujícím příkladu třídu s názvem Taxi je definován pomocí jednoduchého konstruktor.Tato třída pak vytvořena s nové operátor.Taxi Je vyvolán konstruktor new je operátor okamžitě po paměti přidělené 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 žádné parametry, nazývá výchozí konstruktor.Výchozí konstruktory jsou vyvolána při vytváření instance objektu pomocí new operátor a žádné argumenty new.Další informace naleznete v tématu Konstruktory instancí (Příručka programování C#).

Pokud je třída statické, tříd bez konstruktory jsou dána veřejný výchozí konstruktor kompilátoru jazyka C# do instance třídy.Další informace naleznete v tématu Statické třídy a členy statických tříd (Příručka programování C#).

Třídy můžete zabránit tím, že soukromé, konstruktor takto instancí:

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

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

Další informace naleznete v tématu Konstruktory soukromé (C# Příručka programování).

Konstruktory pro struct typy připomínají třídy, ale structs explicitní výchozí konstruktor nemůže obsahovat, protože jeden automaticky poskytované kompilátoru.Tento konstruktor inicializuje v každé pole struct na výchozí hodnoty.Další informace naleznete v tématu Výchozí hodnoty tabulky (C#-Reference).Však tento výchozí konstruktor je vyvolána pouze pokud struct je vytvořena s new.Například tento kód používá výchozí konstruktor pro Int32, takže jsou zajištěno, že je inicializována 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 pokouší použít objekt, který není inicializována:

int i;
Console.WriteLine(i);

Také 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í konstruktoru výchozí hodnotu typu není vyžadováno.

Obě třídy a structs lze definovat konstruktory, které parametry.Konstruktory, parametry, které musí být volána prostřednictvím new prohlášení nebo základní prohlášení.Třídy a structs můžete také definovat více konstruktory 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;
    }
}

Tato třída 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 klíčové slovo 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 se nazývá konstruktor základní třídy před provedením blok pro konstruktor.base Klíčové slovo je možné použít s nebo bez parametrů.Všechny parametry konstruktoru slouží jako parametry pro base, nebo jako součást výrazu.Další informace naleznete v tématu Base (C#-Reference).

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

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

Pokud výchozí konstruktor základní třídy nebude nabízet, odvozené třídy musíte provést explicitní volání konstruktoru základní pomocí base.

Konstruktor vyvolat pomocí jiného konstruktoru ve stejném objektu této klíčové slovo.Jako base, this lze použít s nebo bez parametrů a parametrů do konstruktoru jsou k dispozici jako parametry this, nebo jako součást výrazu.Například druhé konstruktor v předchozím příkladu může být přepsána 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í tento konstruktor pro volání:

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

Konstruktory lze označit jako veřejné, soukromé, 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.Těsně před statické pole jsou přístupné a jsou obecně používány k inicializaci členy statických tříd, automaticky, se nazývají statické konstruktory.Další informace naleznete v tématu Statické konstruktory.

Specifikace jazyka C#

Další informace naleznete 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 struktur (Příručka programování C#)

Konstruktory (Příručka programování C#)

Destruktory (Příručka programování C#)

Koncepty

Příručka programování C#