Share via


Usando structs (Guia de Programação em C#)

O tipo de struct é apropriado para representar objetos leve como Point, Rectangle, e Color. Embora seja apenas tão conveniente representar um ponto como classe com Propriedades auto implementadas, estrutura pode ser mais eficiente em alguns cenários. Por exemplo, se você declarar uma matriz de objetos de 1000 Point , você atribuir a memória adicional para fazer referência a cada objeto; em esse caso, uma estrutura seria menos caro. Porque .NET Framework contém um objeto chamado Point, a estrutura em esse exemplo é chamado “CoOrds” em vez.

public struct CoOrds
{
    public int x, y;

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

É um erro para definir um construtor padrão (sem parâmetros) para um estrutura. Também é um erro para inicializar um campo de instância em um corpo de estrutura. Você pode inicializar membros de estrutura somente usando um construtor com parâmetros ou acessando membros individualmente depois que a estrutura é declarada. Os membros particulares ou de outra forma inacessíveis podem ser inicializados somente em um construtor.

Quando você cria um objeto de estrutura usando o operador de novo , o é criado e o construtor apropriado é chamado. A o contrário das classes, as estruturas podem ser instanciados sem usar o operador de new . Em tais casos, não há nenhuma chamada de construtor, que faz a alocação mais eficiente. Em o entanto, os campos permanecerão o objeto não atribuída e não pode ser usado até que todos os campos são inicializados.

Quando uma estrutura contém um tipo de referência como um membro, o construtor padrão de membro deve ser chamado explicitamente, não se o membro permaneça não atribuída e a estrutura não pode ser usado. (Isso resulta em CS0171 erro do compilador.)

Não há nenhuma herança para estruturas como há para classes. Uma estrutura não pode herdar de outra classe ou estrutura, e não pode ser a base de uma classe. Estruturas, no entanto, herda da classe base Object. Uma estrutura pode implementar interfaces, e que faz exatamente como classes faz.

Você não pode declarar uma classe que usa a palavra-chave struct. Em C#, classes e estruturas são os semanticamente diferentes. Uma estrutura é um tipo de valor, quando uma classe é um tipo de referência. Para obter mais informações, consulte tipos de valor.

A menos que você precise a semântica de tipo de classe, uma pequena com mais eficiência pode ser tratado pelo sistema se você declará-la como um estrutura em vez de isso.

exemplo 1

Descrição

Este exemplo demonstra a inicialização de struct usando os dois construtores padrão e parametrizadas.

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 que é exclusivo para estruturas. cria um objeto de CoOrds sem usar o operador de new . Se você substituir a palavra struct com a palavra class, o programa não será compilado.

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 structs (Guia de Programação em C#)

Structs (Guia de Programação em C#)

Conceitos

Guia de Programação em C#