Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Em C#, a definição de um tipo — uma classe, struct ou registro — é como um esquema que especifica o que o tipo pode fazer. Um objeto é basicamente um bloco de memória alocado e configurado de acordo com o projeto. Este artigo fornece uma visão geral desses esquemas e seus recursos. O próximo artigo desta série apresenta objetos.
Encapsulamento
O encapsulamento é por vezes referido 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. Membros que não se destinam a utilizadores fora da classe ou conjunto são ocultos para limitar o potencial de erros de codificação ou ataques maliciosos. 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 existem em algumas outras linguagens. 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
- Metodologia
- 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 estrutura, conhecido como código de cliente. Outros métodos e propriedades podem ser apenas para uso na classe ou struct em si. É importante limitar a acessibilidade do seu código para que apenas o código do cliente pretendido possa alcançá-lo. Você especifica o quão acessíveis seus tipos e seus membros são para o código do cliente usando os seguintes modificadores de acesso:
- público
- protegido
- interno
- protegido interno
- privada
- privado protegido.
A acessibilidade padrão é private
.
Herança
Classes (mas não structs) suportam o conceito de herança. Uma classe que deriva 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 seladas para evitar 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 classe List<T> no namespace System.Collections.Generic é 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
As classes (mas não structs ou records) 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 através do nome da classe. Classes, estruturas e registros podem conter membros estáticos. Para obter mais informações, consulte Classes estáticas e membros de classes estáticas.
Tipos aninhados
Uma classe, estrutura ou record pode ser aninhada dentro de outra classe, estrutura ou record. 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 objetos.
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 digitadas implicitamente
Dentro de um método de classe ou struct, você pode usar a digitação implícita para instruir o compilador a determinar o tipo de uma variável em tempo de compilação. Para obter mais informações, consulte var (referência C#).
Registos
Você pode adicionar o record
modificador a uma classe ou a uma estrutura. Os registros são tipos com comportamento interno para igualdade baseada em valor. Um registo (seja record class
ou record struct
) fornece as seguintes funcionalidades:
- Sintaxe concisa para criar um tipo de referência com propriedades imutáveis.
- Valorizar a igualdade. 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 destrutiva.
Uma
with
expressão permite criar uma nova instância de registro que é uma cópia de uma instância existente, mas com valores de propriedade especificados alterados. - Formatação integrada 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. As classes de registro suportam herança. As estruturas de registro não suportam herança.
Para obter mais informações, consulte Registros.
Especificação da linguagem C#
Para obter mais informações, consulte a Especificação da Linguagem C# . A especificação da linguagem é a fonte definitiva para a sintaxe e o uso do C#.