Compartilhar via


Usando estruturas (guia de programação de C#)

O struct tipo é adequado para representar objetos leves como Point, Rectangle, e Color. Embora seja conveniente representam um ponto como um classe com Propriedades de Auto-Implemented, um struct pode ser mais eficiente em alguns cenários. Por exemplo, se você declarar uma matriz de 1000 Point objetos, você irá alocar memória adicional para a referência de cada objeto; Nesse caso, seria mais barata uma struct. Porque o .NET Framework contém um objeto chamado Point, struct neste exemplo é chamado de "coords" em vez disso.

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

É um erro ao definir um construtor (sem parâmetros) do padrão para uma struct. Também é um erro ao inicializar um campo de instância em um corpo de struct. Você pode inicializar os membros de struct apenas usando um construtor parametrizado ou acessando os membros individualmente depois que a estrutura é declarada. Todos os membros de particulares ou inacessíveis podem ser inicializados somente em um construtor.

Quando você cria um objeto de struct usando o nova operador, ele é criado e o construtor apropriado é chamado. Diferentemente das classes, structs pode ser instanciada sem usar o new operador. Nesse caso, não há nenhuma chamada de construtor, o que torna a alocação mais eficiente. Entretanto, os campos permanecerão não atribuídos e o objeto não pode ser usado até que todos os campos são inicializados.

Quando uma struct contém um tipo de referência como um membro, o construtor padrão do membro deve ser invocado explicitamente, caso contrário, o membro permanecerá não atribuído e struct não pode ser usado. (Isso resulta em erro de compilador CS0171).

Não há nenhum herança para structs como há para classes. Uma estrutura não pode herdar uma outra estrutura ou classe, e tambem não pode ser base de uma classe. Estruturas, porém, herdam da classe base Object. Uma struct pode implementar interfaces, e ele faz isso, exatamente como classes.

Você não pode declarar uma classe usando a palavra-chave struct. No C#, classes e estruturas são semanticamente diferentes. Um struct é um Tipo de valor,. enquanto uma Classe é um Tipo de referência. Para obter mais informações, consulte Tipos de valor.

A menos que você precise semântica do tipo de referência, uma pequena classe pode ser manipulada com mais eficiência pelo sistema se você declará-lo como uma estrutura em vez disso.

Exemplo 1

Descrição

Este exemplo demonstra struct inicialização usando o padrão e construtores parametrizados.

Código

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}
// Declare and initialize struct objects.
class TestCoOrds
{
    static void Main()
    {
        // Initialize:   
        CoOrds coords1 = new CoOrds();
        CoOrds coords2 = new CoOrds(10, 10);

        // Display results:
        Console.Write("CoOrds 1: ");
        Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);

        Console.Write("CoOrds 2: ");
        Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    CoOrds 1: x = 0, y = 0
    CoOrds 2: x = 10, y = 10
*/

Exemplo 2

Descrição

Este exemplo demonstra um recurso exclusivo de estruturas. Ele cria um objeto de CoOrds sem usar o new operador. Se você substituir a palavra struct com a palavra class, o programa irá compilar.

Código

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}
// Declare a struct object without "new."
class TestCoOrdsNoNew
{
    static void Main()
    {
        // Declare an object:
        CoOrds coords1;

        // Initialize:
        coords1.x = 10;
        coords1.y = 20;

        // Display results:
        Console.Write("CoOrds 1: ");
        Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output: CoOrds 1: x = 10, y = 20

Consulte também

Referência

Classes e estruturas (guia de programação de C#)

Structs (C# Programming Guide)

Conceitos

C# Programming Guide