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
Referência
Classes e estruturas (guia de programação translation from VPE for Csharp)
Construtores (Guia de programação do C#)