Konstruktory wystąpień (Przewodnik programowania w języku C#)

Konstruktorów wystąpienia są używane do tworzenia i zainicjować wszystkie zmienne instancji, korzystając z Nowy wyrażenie, aby utworzyć obiekt klasy.Aby zainicjować statyczne klasy lub zmiennych statycznych w klasie-statycznej, należy zdefiniować konstruktorze statycznym.Aby uzyskać więcej informacji, zobacz Konstruktory statyczne (Przewodnik programowania w języku C#).

Poniższy przykład przedstawia konstruktorem wystąpień:

class CoOrds
{
    public int x, y;

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

[!UWAGA]

Dla jasności Klasa ta zawiera pola publicznych.Pola publiczne nie jest zalecana praktyka programowania, ponieważ umożliwia dowolną metodę w dowolnym miejscu programu bez ograniczeń i niezweryfikowany dostęp do obiektu wewnętrznego działania.Członkowie danych powinny być ogólnie prywatnych i powinni mieć dostęp tylko za pomocą metod i właściwości klasy.

Ten konstruktor wystąpień nazywa się w każdym przypadku, gdy na podstawie obiektu CoOrds klasa została utworzona.Konstruktor, podobnie jak w nich nie przyjmuje żadnych argumentów, jest nazywany domyślnego konstruktora.Jednak często jest przydatne do zapewnienia dodatkowych konstruktory.Na przykład, możemy dodać konstruktora do CoOrds klasy, która pozwala nam określić początkowe wartości dla elementów danych:

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

Dzięki temu CoOrd obiekty są tworzone z uwzględnieniem domyślnej lub określonych wartości początkowej, podobnie do następującej:

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

Jeśli klasa nie ma konstruktora, domyślnego konstruktora jest generowany automatycznie i używane są wartości domyślne, aby zainicjować pól typu obiekt.Na przykład int jest inicjowany na 0.Aby uzyskać więcej informacji o wartościach domyślnych, zobacz Tabela wartości domyślnych (odwołanie w C#).W związku z tym ponieważ CoOrds klasy Konstruktor domyślny inicjalizuje wszystkie członkowie danych do zera, można go usunąć w ogóle bez zmiany, jak działa klasa.Przykładem automatycznie wygenerowanego konstruktora są udostępniane w przykładzie 2 i kompletnym przykładzie przy użyciu wielu konstruktory jest świadczone w przykładzie 1 w dalszej części tego tematu.

Konstruktorów wystąpienia można również wywołać konstruktorów wystąpienia klasy podstawowej.Konstruktora klasy można wywołać konstruktora klasy podstawowej za pośrednictwem inicjatora, w następujący sposób:

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

W tym przykładzie Circle klasy przekazuje wartości reprezentujące usługi radius i wysokość do konstruktora, świadczone przez Shape z którego Circle pochodzi.Kompletny przykład za pomocą Shape i Circle pojawia się w tym temacie, jak w przykładzie 3.

Przykład 1

W poniższym przykładzie zademonstrowano klasy z konstruktorów klas dwóch, jeden bez argumentów, a jeden z dwóch argumentów.

class CoOrds
{
    public int x, y;

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

    // A 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)        
*/

Przykład 2

W tym przykładzie klasy Person nie ma żadnych konstruktory, w których przypadku domyślnego konstruktora jest dostarczany automatycznie, a pola są inicjowane ich wartości domyślne.

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

Warto zauważyć, że wartość domyślna, age jest 0 i wartość domyślna, name jest null.Aby uzyskać więcej informacji o wartościach domyślnych, zobacz Tabela wartości domyślnych (odwołanie w C#).

Przykład 3

Następujący przykład demonstruje użycie inicjatora klasy podstawowej.Circle Klasa pochodzi od klasy ogólne Shapeoraz Cylinder jest pochodną klasy Circle klasy.Konstruktor w każdej klasie pochodnej jest za pomocą jego inicjatora klasy podstawowej.

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
*/

Aby uzyskać więcej przykładów na temat wywoływania konstruktorów klas podstawowych, zobacz virtual (odwołanie w C#), override (odwołanie w C#), i base (odwołanie w C#).

Zobacz też

Informacje

Klasy i struktury (Przewodnik programowania w języku C#)

Konstruktorzy (Przewodnik programowania w języku C#)

Destruktory (Przewodnik programowania w języku C#)

static (odwołanie w C#)

Koncepcje

Przewodnik programowania w języku C#