Compartilhar via


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

The struct tipo é adequado para representar, sistema autônomo sistema autônomo objetos simplificados Point, Rectangle, e Color. Embora seja conveniente representam um ponto sistema autônomo um classewith ImplementedProperties automática, a struct pode ser mais eficiente em alguns cenários.Por exemplo, se você declarar uma matriz de 1000 Point objetos alocará memória adicional para a referência de cada objeto; neste caso, uma struct seria mais barata. Porque o .NET Framework contém um objeto chamado Point, struct neste exemplo é denominado "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) 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 com parâmetros ou acessar os membros individualmente após a estrutura é declarada.Quaisquer membros particulares ou outra forma inacessíveis podem ser inicializados somente em um construtor.

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

Quando uma struct contém um tipo de referência sistema autônomo um membro, o construtor padrão do membro deve ser chamado explicitamente, caso contrário, o membro permanecerá não atribuído e a estrutura não pode ser usada.(Isso resultados em erro de compilador CS0171.)

Não há nenhum herança para structs sistema autônomo há classes de.Uma struct não pode herdar de outra classe ou struct e não pode ser a base de uma classe.As estruturas, porém, herdam a classe base Object. Uma estrutura pode implementar interfaces e ele faz isso, exatamente sistema autônomo classes.

Ao contrário do C++, você não pode declarar uma classe usando a palavra-chave struct. Em translation from VPE for Csharp, 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, classes pequenos podem ser mais eficiente manuseadas pelo sistema sistema autônomo uma struct.

Exemplo 1

Descrição

Este exemplo demonstra struct o uso do padrão e construtores com parâmetros de inicialização.

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 structs.Ele cria um objeto CoOrds sem usar o new operador. 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

Conceitos

Guia de Programação C#

Referência

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

Structs (guia de programação C#)

Date

History

Motivo

Julho de 2008

Parágrafo adicional sobre CS0171

Correção de bug do conteúdo.