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

Classes e estruturas são duas construções  básicas do sistema de tipo comum no .NET Framework. Cada uma é essencialmente uma estrutura de dados que encapsula um conjunto de dados e comportamentos que pertencem juntos como uma unidade lógica. Os dados e os comportamentos são o membros da classe ou struct, e eles incluem seus métodos, propriedades e eventos e assim por diante, conforme listados neste tópico.

Uma declaração de classe ou estrutura é como um desenho que é usado para criar instâncias ou objetos em tempo de execução. Se você definir uma classe ou struct chamado Person, Person é o nome do tipo. Se você declarar e inicializar uma variável p do tipo Person, p é considerado um objeto ou ocorrência de Person. Várias instâncias do mesmo Person tipo pode ser criado, e cada instância pode ter valores diferentes em suas propriedades e campos.

Uma classe é um tipo de referência. Quando um objeto da classe é criado, a variável à qual o objeto está atribuído contém apenas uma referência para a memória. Quando a referência de objeto é atribuída a uma nova variável, a novo variável se refere ao objeto original. As alterações feitas através de uma variável são refletidas na outra variável pois ambos se referem aos mesmos dados.

Uma struct é um tipo de valor. Quando uma struct é criada, a variável aos quais a struct é atribuída contém dados reais da struct. Quando a struct é atribuída a uma nova variável, ela é copiada. A nova variável e a variável original, portanto, contém duas cópias separadas dos mesmos dados. Alterações feitas em uma não afetam a outra.

Em geral, as classes são usadas para modelar o comportamento mais complexo ou dados que se destinam a ser modificados depois que um objeto de classe é criado. As estruturas são mais apropriadas para estruturas de dados pequeno que contêm principalmente os dados que não se destina a serem modificados depois que a estrutura é criada.

Para obter mais informações, consulte Classes (C# Programming Guide), Objects (C# Programming Guide) e Structs (C# Programming Guide).

Exemplo

No exemplo a seguir, MyCustomClass é definida com três membros de nível superior da ProgrammingGuide namespace. Uma instância (objeto) de MyCustomClass é criado na Main método na Program classe e métodos e propriedades do objeto são acessadas usando notação de ponto.

    namespace ProgrammingGuide
    {
        // Class definition.
        public class MyCustomClass
        {
            // Class members:
            // Property.
            public int Number { get; set; }

            // Method.
            public int Multiply(int num)
            {
                return num * Number;
            }

            // Instance Constructor.
            public MyCustomClass()
            {
                Number = 0;
            }
        }
        // Another class definition. This one contains
        // the Main method, the entry point for the program.
        class Program
        {
            static void Main(string[] args)
            {
                // Create an object of type MyCustomClass.
                MyCustomClass myClass = new MyCustomClass();

                // Set the value of a public property.
                myClass.Number = 27;

                // Call a public method.
                int result = myClass.Multiply(4);
            }
        }
    }

Encapsulamento

Encapsulamento processo é conhecido como o primeiro pilar ou o princípio da programação orientada a objeto. De acordo com para o princípio de encapsulamento, class ou struct pode especificar como acessível que cada um de seus membros é código fora da classe ou struct. Métodos e variáveis que não se destina a ser usado em fora da classe ou assembly podem ser oculto para limitar o potencial de erros ou mal-intencionado explorações de codificação.

Para obter mais informações sobre classes, consulte Classes (C# Programming Guide) e Objects (C# Programming Guide). Para obter mais informações sobre como as classes de design, consulte Diretrizes de Design do tipo.

Membros

Todas as constantes, métodos, campos, propriedades e eventos que devem ser declarados dentro de um tipo; Estes são chamados de membros da classe ou struct. Em C#, não há variáveis globais ou métodos como em outras linguagens. Até mesmo ponto de entrada do programa, o Main método, deve ser declarado dentro de uma classe ou struct. A lista a seguir inclui todos os vários tipos de membros que podem ser declarados em uma classe ou struct.

Acessibilidade

Alguns métodos e propriedades devem ser chamados ou acessado a partir do código fora de sua classe ou struct, conhecido como código de cliente. Outros métodos e propriedades podem ser somente para uso na classe ou struct propriamente dito. É importante limitar a acessibilidade de seu código para que somente o código do cliente se destina a pode alcançar. Você especificar como acessível seus tipos e seus membros são o código de cliente usando os modificadores de acesso pública, protegido, interno, protected internal, e particular. A acessibilidade padrão é private. Para obter mais informações, consulte Access Modifiers (C# Programming Guide).

Herança

Classes (mas não structs) suporta o conceito de herança. Uma classe que deriva de outra classe (o classe base) contém automaticamente todos os membros public, protected e internos da classe base, exceto seus construtores e destrutores. Para obter mais informações, consulte Inheritance (C# Programming Guide) e Polymorphism (C# Programming Guide).

Classes podem ser declarados como abstrata, que significa que um ou mais dos seus métodos não possuem implementação. Embora as classes abstratas não podem ser instanciadas diretamente, elas podem servir como classes base para outras classes que fornecem a implementação ausente. Classes também podem ser declarados como lacrado para impedir que outras classes de herança a partir deles. Para obter mais informações, consulte Abstract and Sealed Classes and Class Members (C# Programming Guide).

Interfaces

Classes e structs pode herdar várias interfaces. Para herdar a partir de um meio de interface que o tipo implementa todos os métodos definidos na interface. Para obter mais informações, consulte Interfaces (C# Programming Guide).

Tipos genéricos

Classes e estruturas podem ser definidas com um ou mais parâmetros de tipo. Código do cliente fornece o tipo quando ele cria uma instância do tipo. Por exemplo o List<T> classe na System.Collections.Generic namespace é definido com um parâmetro de tipo. Código do cliente cria uma instância de um List<string> ou List<int> para especificar o tipo que a lista será suspenso. Para obter mais informações, consulte Generics (C# Programming Guide).

Tipos estáticos

Classes (mas não structs) podem ser declarados como estático. Uma classe estática pode conter apenas membros estáticos e não pode ser instanciada com a nova palavra-chave. Uma cópia da classe é carregada na memória quando o programa for carregado, e seus membros são acessados através do nome de classe. As classes e estruturas podem conter membros estáticos. Para obter mais informações, consulte Static Classes and Static Class Members (C# Programming Guide).

Tipos aninhados

Class ou struct pode ser aninhado dentro de outro class ou struct. Para obter mais informações, consulte Tipos aninhados.

Tipos parciais

Você pode definir a parte de uma classe, struct ou um método em um arquivo de código e outra parte em um arquivo de código separados. Para obter mais informações, consulte Classes parciais e métodos.

Inicializadores de Objeto

Você pode instanciar e inicializar a classe ou struct objetos e coleções de objetos, sem chamar explicitamente o seu construtor. Para obter mais informações, consulte Objeto e coleção inicializadores (guia de programação de C#).

Tipos Anônimos

Em situações onde não é conveniente ou necessárias para criar uma classe nomeada, quando você estiver preenchendo uma lista com dados estruturas que por exemplo que você não tem persistir ou passar para outro método, você usar tipos anônimos. Para obter mais informações, consulte Tipos anônimos (guia de programação de C#).

Métodos de extensão

Você pode "estender" uma classe sem criar uma classe derivada, criando um tipo separado cujos métodos pode ser chamada como se eles pertenciam ao tipo original. Para obter mais informações, consulte Métodos de extensão (guia de programação de C#).

Variaveis Locais Implicitamente Tipadas

Dentro de um método de classe ou estrutura, você pode usar digitação implícita para instruir o compilador para determinar o tipo correto no tempo de compilação. Para obter mais informações, consulte Implicitamente digitado variáveis locais (C# guia de programação).

Especificação da linguagem C#

Para obter mais informações, consulte C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Conceitos

C# Programming Guide