Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Em C#, a definição de um tipo — uma classe, struct ou registro — é como um blueprint que especifica o que o tipo pode fazer. Um objeto é basicamente um bloco de memória alocado e configurado de acordo com o blueprint. Este artigo fornece uma visão geral desses blueprints e seus recursos. O próximo artigo desta série apresenta objetos.
Encapsulamento
Às vezes, o encapsulamento é conhecido como o primeiro pilar ou princípio da programação orientada a objetos. Uma classe ou struct pode especificar o quão acessível cada um de seus membros é para codificar fora da classe ou struct. Os membros não destinados a consumidores fora da classe ou assembly estão ocultos para limitar o potencial de codificação de erros ou explorações mal-intencionadas. Para obter mais informações, consulte o tutorial de programação orientada a objetos.
Membros
Os membros de um tipo incluem todos os métodos, campos, constantes, propriedades e eventos. Em C#, não há variáveis ou métodos globais como há em algumas outras linguagens. Até mesmo o ponto de entrada de um programa, o Main
método, deve ser declarado dentro de uma classe ou struct (implicitamente quando você usa instruções de nível superior).
A lista a seguir inclui todos os vários tipos de membros que podem ser declarados em uma classe, struct ou registro.
- Campos
- Constantes
- Propriedades
- Métodos
- Construtores
- Eventos
- Finalizadores
- Indexadores
- Operadores
- Tipos aninhados
Para obter mais informações, consulte Membros.
Acessibilidade
Alguns métodos e propriedades devem ser chamados ou acessados a partir de código fora de uma classe ou struct, que são conhecidos como código do cliente. Outros métodos e propriedades podem ser usados apenas na classe ou struct em si. É importante limitar a acessibilidade do código para que somente o código do cliente pretendido possa alcançá-lo. Especifique o quão acessíveis seus tipos e seus membros são para o código do cliente usando os seguintes modificadores de acesso:
A acessibilidade padrão é private
.
Herança
Classes (mas não structs) dão suporte ao conceito de herança. Uma classe derivada de outra classe, chamada classe base, contém automaticamente todos os membros públicos, protegidos e internos da classe base, exceto seus construtores e finalizadores.
As classes podem ser declaradas como abstratas, o que significa que um ou mais de seus métodos não têm implementação. Embora as classes abstratas não possam ser instanciadas diretamente, elas podem servir como classes base para outras classes que fornecem a implementação ausente. As classes também podem ser declaradas como lacradas para impedir que outras classes herdem delas.
Para obter mais informações, consulte Herança e Polimorfismo.
Interfaces
Classes, structs e registros podem implementar várias interfaces. Implementar a partir de uma interface significa que o tipo implementa todos os métodos definidos na interface. Para obter mais informações, consulte Interfaces.
Tipos genéricos
Classes, structs e registros podem ser definidos com um ou mais parâmetros de tipo. O código do cliente fornece o tipo quando cria uma instância do tipo. Por exemplo, a List<T> classe no System.Collections.Generic namespace é definida com um parâmetro de tipo. O código do cliente cria uma instância de um List<string>
ou List<int>
para especificar o tipo que a lista contém. Para obter mais informações, consulte Genéricos.
Tipos estáticos
Classes (mas não structs ou registros) podem ser declaradas como static
. Uma classe estática pode conter apenas membros estáticos e não pode ser instanciada com a new
palavra-chave. Uma cópia da classe é carregada na memória quando o programa é carregado e seus membros são acessados por meio do nome da classe. Classes, structs e registros podem conter membros estáticos. Para obter mais informações, consulte classes estáticas e membros de classe estática.
Tipos aninhados
Uma classe, um struct ou um registro podem ser aninhados em outra classe, struct ou registro. Para obter mais informações, consulte Tipos aninhados.
Tipos parciais
Você pode definir parte de uma classe, struct ou método em um arquivo de código e outra parte em um arquivo de código separado. Para obter mais informações, consulte Classes e métodos parciais.
Inicializadores de objeto
Você pode instanciar e inicializar objetos de classe ou struct e coleções de objetos, atribuindo valores às suas propriedades. Para obter mais informações, consulte Como inicializar objetos usando um inicializador de objeto.
Tipos anônimos
Em situações em que não é conveniente ou necessário criar uma classe nomeada, você usa tipos anônimos. Os membros de dados nomeados definem tipos anônimos. Para obter mais informações, consulte tipos anônimos.
Membros da Extensão
Você pode "estender" uma classe sem criar uma classe derivada criando um tipo separado. Esse tipo contém métodos que podem ser chamados como se pertencessem ao tipo original. Para obter mais informações, consulte Métodos de extensão.
Variáveis Locais Tipadas Implicitamente
Em uma classe ou método struct, você pode usar a digitação implícita para instruir o compilador a determinar o tipo de uma variável no tempo de compilação. Para obter mais informações, consulte var (referência de C#).
Arquivos
Você pode adicionar o record
modificador a uma classe ou a um struct. Os registros são tipos com comportamento interno para igualdade baseada em valor. Um registro (seja record class
ou record struct
) fornece os seguintes recursos:
- Sintaxe concisa para criar um tipo de referência com propriedades imutáveis.
- Igualdade de valor. Duas variáveis de um tipo de registro são iguais se tiverem o mesmo tipo e se, para cada campo, os valores em ambos os registros forem iguais. As classes usam igualdade de referência: duas variáveis de um tipo de classe são iguais se se referirem ao mesmo objeto.
- Sintaxe concisa para mutação não estruturativa.
Uma
with
expressão permite que você crie uma nova instância de registro que seja uma cópia de uma instância existente, mas com valores de propriedade especificados alterados. - Formatação embutida para exibição.
O
ToString
método imprime o nome do tipo de registro e os nomes e valores das propriedades públicas. - Suporte para hierarquias de herança em classes de registro. Classes de registro dão suporte à herança. Os structs de registro não dão suporte à herança.
Para saber mais, confira Registros.
Especificação da linguagem C#
Para obter mais informações, consulte a Especificação da Linguagem C# . A especificação de idioma é a fonte definitiva para a sintaxe e o uso de C#.