Sdílet prostřednictvím


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

Konstruktory instancí slouží k vytvoření a inicializace žádné členské proměnné instance při použití nové výraz vytvořit objekt třídy.Inicializace statické třídy nebo statické proměnné do třídy nestatický statický konstruktor musí definovat.Další informace naleznete v tématu Statické konstruktory (Příručka programování C#).

Následující příklad ukazuje konstruktoru instance:

class CoOrds
{
    public int x, y;

    // constructor
    public CoOrds()
    {
        x = 0;
        y = 0;
    }
}

[!POZNÁMKA]

Z důvodu srozumitelnosti Tato třída obsahuje veřejné pole.Veřejné pole není doporučená praxe programování, protože umožňuje jakékoli metody kdekoliv v programu neomezený a přístup k objektu s vnitřními mechanismy Neověřeno.Datové členy by obecně měla být soukromé a měli přístup pouze prostřednictvím metody a vlastnosti třídy.

Tento konstruktor instance se nazývá kdykoli na základě objektu CoOrds vytvořena třída.Konstruktor jako tento jeden, který nevyžaduje žádné argumenty, se nazývá výchozí konstruktor.Často je však užitečné poskytnout další konstruktory.Například můžete přidat do konstruktoru CoOrds třídy, která umožňuje určit počáteční hodnoty pro datové členy:

// tcA constructor with two arguments:
public CoOrds(int x, int y)
{
    this.x = x;
    this.y = y;
}

Díky CoOrd objekty, které mají být vytvořeny s výchozím nebo určité počáteční hodnoty tímto způsobem:

CoOrds p1 = new CoOrds();
CoOrds p2 = new CoOrds(5, 3);

Pokud třída nemá konstruktor, je automaticky generován výchozí konstruktor a inicializace pole objektu budou použity výchozí hodnoty.Například int 0 je inicializován.Další informace o výchozích hodnotách naleznete v Výchozí hodnoty tabulky (C#-Reference).Proto protože CoOrds třídy výchozí konstruktor inicializuje všechny členy dat na nulu, mohou být odstraněny úplně beze změny, jak funguje třídy.Kompletní příklad použití více konstruktory je uveden v příkladu 1 dále v tomto tématu a příklad automaticky generované konstruktoru je uveden v příkladu 2.

Konstruktory instancí lze také volání konstruktory instancí základní třídy.Konstruktoru třídy můžete vyvolat konstruktoru třídy base inicializátor, takto:

class Circle : Shape
{
    public Circle(double radius)
        : base(radius, 0)
    {
    }
}

V tomto příkladu Circle třídy předává hodnoty představující radius a výška poskytované konstruktoru Shape ze kterého Circle je odvozen.Kompletní příklad používání Shape a Circle se zobrazí v tomto tématu jako příklad 3.

Příklad 1

Příklad třídy s konstruktory dvě třídy, jeden bez argumentů a jeden se dvěma argumenty.

class CoOrds
{
    public int x, y;

    // Default constructor:
    public CoOrds()
    {
        x = 0;
        y = 0;
    }

    // tcA constructor with two arguments:
    public CoOrds(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    // Override the ToString method:
    public override string ToString()
    {
        return (String.Format("({0},{1})", x, y));
    }
}

class MainClass
{
    static void Main()
    {
        CoOrds p1 = new CoOrds();
        CoOrds p2 = new CoOrds(5, 3);

        // Display the results using the overriden ToString method:
        Console.WriteLine("CoOrds #1 at {0}", p1);
        Console.WriteLine("CoOrds #2 at {0}", p2);
        Console.ReadKey();
    }
}
/* Output:
 CoOrds #1 at (0,0)
 CoOrds #2 at (5,3)        
*/

Příklad 2

V tomto příkladu třídy Person nemá žádné konstruktory, v nichž je poskytován automaticky v případě výchozí konstruktor a na jejich výchozí hodnoty jsou inicializovány polí.

public class Person
{
    public int age;
    public string name;
}

class TestPerson
{
    static void Main()
    {
        Person person = new Person();

        Console.WriteLine("Name: {0}, Age: {1}", person.name, person.age);
        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output:  Name: , Age: 0

Všimněte si, že výchozí hodnotu age je 0 a výchozí hodnotu name je null.Další informace o výchozích hodnotách naleznete v Výchozí hodnoty tabulky (C#-Reference).

Příklad 3

Následující příklad ukazuje použití inicializátor základní třídy.Circle Třída je odvozena od třídy Obecné Shapea Cylinder třída je odvozena z Circle třídy.Konstruktor pro každou třídu odvozenou pomocí jeho základní třídy inicializátor.

abstract class Shape
{
    public const double pi = Math.PI;
    protected double x, y;

    public Shape(double x, double y)
    {
        this.x = x;
        this.y = y;
    }

    public abstract double Area();
}

class Circle : Shape
{
    public Circle(double radius)
        : base(radius, 0)
    {
    }
    public override double Area()
    {
        return pi * x * x;
    }
}

class Cylinder : Circle
{
    public Cylinder(double radius, double height)
        : base(radius)
    {
        y = height;
    }

    public override double Area()
    {
        return (2 * base.Area()) + (2 * pi * x * y);
    }
}

class TestShapes
{
    static void Main()
    {
        double radius = 2.5;
        double height = 3.0;

        Circle ring = new Circle(radius);
        Cylinder tube = new Cylinder(radius, height);

        Console.WriteLine("Area of the circle = {0:F2}", ring.Area());
        Console.WriteLine("Area of the cylinder = {0:F2}", tube.Area());

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Area of the circle = 19.63
    Area of the cylinder = 86.39
*/

Příklady na vyvolání konstruktory základní třídy naleznete v virtuální (C#-Reference), přepsat (C#-Reference), a Base (C#-Reference).

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#)

statické (C#-Reference)

Koncepty

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