Visão geral das classes, structs e registos em C #

Em C#, a definição de um tipo - uma classe, estrutura ou gravação - é como uma planta que especifica o que o tipo pode fazer. Um objeto é basicamente um bloco de memória que foi alocado e configurado de acordo com a planta. Este artigo fornece uma visão geral destas plantas e suas características. O próximo artigo desta série introduz objetos.

Encapsulamento

O encapsulamento é por vezes referido como o primeiro pilar ou princípio da programação orientada para os objetos. Uma classe ou estrutura pode especificar o quão acessível cada um dos seus membros é codificar fora da classe ou estrutura. Métodos e variáveis que não se destinem a ser usados fora da classe ou montagem podem ser ocultados para limitar o potencial de codificação de erros ou explorações maliciosas. Para obter mais informações, consulte o tutorial de programação orientado para o Objeto .

Membros

Os membros de um tipo incluem todos os métodos, campos, constantes, propriedades e eventos. Em C#, não existem variáveis ou métodos globais como existem em algumas outras línguas. Mesmo o ponto de entrada de um programa, o Main método, deve ser declarado dentro de uma classe ou estrutura (implicitamente quando se utiliza declarações de alto nível).

A lista seguinte inclui todos os vários tipos de membros que podem ser declarados numa classe, estrutura ou registo.

  • Campos
  • Constantes
  • Propriedades
  • Métodos
  • Construtores
  • evento
  • Finalistas
  • Indexadores
  • Operadores
  • Tipos Aninhados

Para mais informações, consulte os deputados.

Acessibilidade

Alguns métodos e propriedades devem ser chamados ou acedidos a partir de código fora de uma classe ou estrutura, conhecido como código do cliente. Outros métodos e propriedades podem ser apenas para uso na classe ou na própria estrutura. É importante limitar a acessibilidade do seu código para que apenas o código de cliente pretendido possa alcançá-lo. Especifica o quão acessíveis os seus tipos e os seus membros estão ao código do cliente, utilizando os seguintes modificadores de acesso:

A acessibilidade predefinida é private.

Herança

As aulas (mas não as structs) apoiam 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 os seus construtores e finalistas.

As aulas podem ser declaradas como abstratas, o que significa que um ou mais dos seus métodos não têm implementação. Embora as classes abstratas não possam ser instantaneamente instantâneas, podem servir como classes base para outras classes que fornecem a implementação em falta. As aulas também podem ser declaradas seladas para evitar que outras classes herdem delas.

Para mais informações, consulte Herança e Polimorfismo.

Interfaces

Classes, structs e registos podem implementar várias interfaces. Implementar a partir de uma interface significa que o tipo implementa todos os métodos definidos na interface. Para mais informações, consulte Interfaces.

Tipos Genéricos

Classes, structs e registos podem ser definidos com um ou mais parâmetros do tipo. O código do cliente fornece o tipo quando cria uma instância do tipo. Por exemplo, a List<T> classe no espaço de System.Collections.Generic nomes é 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 irá deter. Para mais informações, consulte genéricos.

Tipos Estáticos

As aulas (mas não as structs ou os registos) podem ser declaradas como static. Uma classe estática pode conter apenas membros estáticos e não pode ser instantânea com a new palavra-chave. Uma cópia da classe é carregada na memória quando o programa carrega, e os seus membros são acedidos através do nome da classe. Classes, structs e registos podem conter membros estáticos. Para obter mais informações, consulte classes estáticas e membros da classe estática.

Tipos Aninhados

Uma classe, estrutura ou registo pode ser aninhado dentro de outra classe, estrutura, ou registo. Para mais informações, consulte Os Tipos Aninhados.

Tipos Parciais

Pode definir parte de uma classe, estrutura ou método num ficheiro de código e outra parte num ficheiro de código separado. Para mais informações, consulte Aulas e Métodos Parciais.

Inicializadores de Objetos

Pode instantaneaizar e inicializar objetos de classe ou de estrutura, e coleções de objetos, atribuindo valores às suas propriedades. Para obter mais informações, consulte Como inicializar os objetos utilizando 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 tipos anónimos são definidos pelos seus membros de dados nomeados. Para mais informações, consulte os tipos Anónimos.

Métodos da Extensão

Pode "estender" uma classe sem criar uma classe derivada criando um tipo separado. Este tipo contém métodos que podem ser chamados como se pertencessem ao tipo original. Para mais informações, consulte os métodos de extensão).

Variáveis locais dactilografada implicitamente

Dentro de um método de classe ou estrutura, pode utilizar a dactilografia implícita para instruir o compilador a determinar o tipo de variável na hora de compilar. Para mais informações, consulte var (referência C#).

Registos

C# 9 introduz o record tipo, um tipo de referência que pode criar em vez de uma classe ou uma estrutura. Os registos são classes com comportamento incorporado para encapsular dados em tipos imutáveis. C# 10 introduz o tipo de record struct valor. Um registo (ou record class ou record struct) fornece as seguintes características:

  • Sintaxe concisa para criar um tipo de referência com propriedades imutáveis.
  • Igualdade de valor. Duas variáveis de um tipo de registo são iguais se tiverem o mesmo tipo, e se, para cada campo, os valores em ambos os registos forem iguais. As classes usam a 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 registo que é uma cópia de uma instância existente, mas com valores de propriedade especificados alterados.
  • Formatação incorporada para exibição. O ToString método imprime o nome do tipo de registo e os nomes e valores das propriedades públicas.
  • Apoio às hierarquias de herança em classes recorde. Aulas recorde apoiam a herança. As turas recorde não suportam a herança.

Para mais informações, consulte a Records.

Especificação linguística C#

Para mais informações, consulte a Especificação de Idioma C. A especificação linguística é a fonte definitiva para a sintaxe e utilização C#.