Partilhar via


Construtores de instância (Guia de programação C#)

Construtores de instância são usados para criar e inicializar instâncias.O construtor da classe é chamado quando você cria um novo objeto, por exemplo:

class CoOrds
{
    public int x, y;

    // constructor
    public CoOrds()
    {
        x = 0;
        y = 0;
    }
}
Observação:

Para maior clareza, essa classe contém membros de dados pública.Isso não é uma prática de programação recomendada porque ela permite que qualquer método em qualquer lugar em um programa irrestrito e sem a verificação de acesso ao funcionamento interno do objeto.Membros de dados devem ser geralmente priva te e deve ser acessado apenas por meio de propriedades e métodos da classe.

Esse construtor é chamado sempre que um objeto com base na CoOrds classe é criada. Um construtor como este, que não requer argumentos, é chamado um construtor padrão.No entanto, muitas vezes é útil fornecer construtores adicionais.Por exemplo, podemos adicionar um construtor ao CoOrds classe que permite especificar os valores iniciais para os membros de dados:

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

Isso permite que CoOrd objetos sejam criados com o padrão ou valores iniciais específicos, assim:

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

Se uma classe não tem um construtor padrão, um é gerado automaticamente e valores padrão serão usados para inicializar os campos de objeto, por exemplo, um int é inicializado para 0.Para obter mais informações sobre valores padrão, consulte Tabela de valores padrão (translation from VPE for Csharp Reference). Portanto, porque o CoOrds classe padrão construtor inicializa todos os membros de dados para zero, pode ser removido completamente sem alterar o funcionamento da classe. Um exemplo completo usando vários construtores é fornecido no exemplo 1 neste tópico, e um exemplo de um construtor gerado automaticamente é fornecido no exemplo 2.

Construtores de instância também podem ser usados para chamar os construtores de instância de classes base.O construtor clsistema autônomos pode chamar o construtor do clsistema autônomos bsistema autônomoe através do inicializador sistema autônomo segue:

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

Neste exemplo, a Circle classe passa valores que representam o RADIUS e a altura para o construtor fornecido por Shape em que Circle é derivado. Um exemplo completo usando Shape e Circle aparece neste tópico sistema autônomo exemplo 3.

Exemplo 1

O exemplo a seguir demonstra uma classe com construtores de classe dois um sem argumentos e com dois argumentos.

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

Exemplo 2

Neste exemplo, a classe Person não tem qualquer construtores, no qual os casos, um construtor padrão é fornecido automaticamente e os campos são inicializados para seus valores padrão.

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

Observe que o valor padrão de age é 0 e o valor padrão de name é null. Para obter mais informações sobre valores padrão, consulte Tabela de valores padrão (translation from VPE for Csharp Reference).

Exemplo 3

O exemplo a seguir demonstra como usar o inicializador de classe base.The Circle classe é derivada da classe geral Shapee o Cylinder classe é derivada da Circle classe. O construtor em cada classe derivada está usando seu inicializador da classe base.

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

Para obter mais exemplos de chamar os construtores de classe base, consulte (referência C#) virtual, Substituir (referência C#), e Base (Referência C#).

Consulte também

Conceitos

Guia de Programação C#

Referência

Classes e estruturas (guia de programação translation from VPE for Csharp)

Construtores (Guia de programação do C#)

Destructors (guia de programação C#)

static (referência C#)