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.
Este tutorial ensina como criar tipos em C#. Você escreve pequenas quantidades de código e, em seguida, compila e executa esse código. O tutorial contém uma série de lições que exploram diferentes tipos de tipos em C#. Essas lições ensinam os conceitos básicos da linguagem C#.
Os tutoriais anteriores funcionavam com texto e números. Cadeias de caracteres e números são tipos simples: cada um armazena um único valor. À medida que seus programas aumentam, você precisa trabalhar com estruturas de dados mais sofisticadas. O C# fornece diferentes tipos de tipos que você pode definir quando precisa de estruturas de dados com mais campos, propriedades ou comportamento. Vamos começar a explorar esses tipos.
Neste tutorial, você:
- Criar e manipular tipos de tupla.
- Criar tipos de registro.
- Saiba mais sobre struct, classe e tipos de interface.
Pré-requisitos
Você deve ter um dos seguintes:
- Uma conta do GitHub para usar os Codespaces do GitHub. Se você ainda não tiver uma, poderá criar uma conta gratuita em GitHub.com.
- Um computador com as seguintes ferramentas instaladas:
Para usar codespaces, você precisa de uma conta do GitHub. Se você ainda não tiver uma, poderá criar uma conta gratuita em GitHub.com.
Tuplas
Para iniciar um Codespace do GitHub com o ambiente do tutorial, abra uma janela do navegador para o repositório do codespace do tutorial. Selecione o botão código verde e a guia Codespaces . Em seguida, selecione o + sinal para criar um novo Codespace usando esse ambiente. Se você concluiu outros tutoriais nesta série, poderá abrir esse codespace em vez de criar um novo.
Quando o codespace for carregado, crie um novo arquivo na pasta de tutoriais chamada tuples.cs.
Abra seu novo arquivo.
Digite ou copie o seguinte código para tuples.cs:
var pt = (X: 1, Y: 2); var slope = (double)pt.Y / (double)pt.X; Console.WriteLine($"A line from the origin to the point {pt} has a slope of {slope}.");Execute seu programa digitando os seguintes comandos na janela do terminal integrado:
cd tutorials dotnet tuples.csTuplas são uma sequência ordenada de valores com um comprimento fixo. Cada elemento de uma tupla tem um tipo e um nome opcional.
Dica
Ao explorar C# (ou qualquer linguagem de programação), você comete erros ao escrever código. O compilador localiza esses erros e os relata para você. Quando a saída contiver mensagens de erro, examine atentamente o código de exemplo e seu código para ver o que corrigir. Você também pode pedir a Copilot para encontrar diferenças ou detectar erros. Esse exercício ajuda você a aprender a estrutura do código C#.
Adicione o seguinte código após o código anterior para modificar um membro de tupla:
pt.X = pt.X + 5; Console.WriteLine($"The point is now at {pt}.");Você também pode criar uma nova tupla que é uma cópia modificada da tupla original usando a expressão
with. Adicione o seguinte código após o código existente e digitedotnet tuples.csna janela do terminal para ver os resultados:var pt2 = pt with { Y = 10 }; Console.WriteLine($"The point 'pt2' is at {pt2}.");A tupla
pt2contém oXvalor dept(6) ept2.Yé 10. Tuplas são tipos estruturais. Em outras palavras, os tipos de tuplas não têm nomes comostringouint. Um tipo de tupla é definido pelo número de membros, conhecido como aridade e pelos tipos desses membros. Os nomes dos membros são para conveniência. Você pode atribuir uma tupla a uma tupla com a mesma aridade e tipos, mesmo que os membros tenham nomes diferentes.Você pode adicionar o seguinte código depois do código que você já escreveu:
var subscript = (A: 0, B: 0); subscript = pt; Console.WriteLine(subscript);Experimente digitando
dotnet tuples.csna janela do terminal. A variávelsubscripttem dois membros, ambos inteiros. Ambossubscripteptrepresentam instâncias do mesmo tipo de tupla: uma tupla que contém doisintmembros.Tuplas são fáceis de criar: você declara vários membros entre parênteses. Todas as declarações a seguir definem tuplas diferentes com diferentes aridades e tipos de membros.
Adicione o seguinte código para criar novos tipos de tuplas:
var namedData = (Name: "Morning observation", Temp: 17, Wind: 4); var person = (FirstName: "", LastName: ""); var order = (Product: "guitar picks", style: "triangle", quantity: 500, UnitPrice: 0.10m);Tente essa alteração digitando
dotnet tuples.csnovamente na janela do terminal.
Embora as tuplas sejam fáceis de criar, elas são limitadas em suas funcionalidades. Os tipos de tuplas não têm nomes, portanto, você não pode dar significado ao conjunto de valores. Os tipos de tuplas não podem adicionar comportamento. O C# tem outros tipos de tipos que você pode criar quando seu tipo define o comportamento.
Criar tipos de registro
As tuplas são ótimas para aqueles momentos em que você deseja vários valores na mesma estrutura. Leves, e você pode declará-los conforme você os utiliza. À medida que seu programa cresce, você pode descobrir que usa o mesmo tipo de tupla em todo o código. Se o aplicativo funcionar no espaço do grafo 2D, as tuplas que representam pontos poderão ser comuns. Ao encontrar esse padrão, você pode declarar um record tipo que armazena esses valores e fornece mais recursos.
Adicione o seguinte código para declarar e usar um
recordtipo para representar umPoint:public record Point(int X, int Y);O código anterior deve estar na parte inferior do arquivo de origem. Declarações de tipo, como as
record, devem vir após declarações executáveis em uma aplicação baseada em arquivo.Adicione o seguinte código antes da
recorddeclaração:Point pt3 = new Point(1, 1); var pt4 = pt3 with { Y = 10 }; Console.WriteLine($"The two points are {pt3} and {pt4}");A declaração
recordé uma linha de código única para o tipoPointque armazena os valoresXeYem propriedades de leitura única. Você usa o nomePointsempre que usar esse tipo. Tipos nomeados corretamente, comoPoint, fornecem informações sobre como o tipo é usado. O código adicional mostra como usar umawithexpressão para criar um novo ponto que seja uma cópia modificada do ponto existente. A linhapt4 = pt3 with { Y = 10 }diz "pt4tem os mesmos valores quept3, exceto queYé atribuído a 10." Você pode adicionar qualquer número de propriedades para alterar em uma única expressãowith.A declaração anterior
recordé uma única linha de código que termina em;. Você pode adicionar comportamento a umrecordtipo declarando membros. Um membro de registro pode ser uma função ou mais elementos de dados. Os membros de um tipo estão na declaração de tipo, entre{e}caracteres.Exclua o
;e adicione as seguintes linhas de código após a declaraçãorecord.{ public double Slope() => (double)Y / (double)X; }Adicione o seguinte código antes da
recorddeclaração, depois da linha que contém awithexpressão:double slopeResult = pt4.Slope(); Console.WriteLine($"The slope of {pt4} is {slopeResult}");Digite
dotnet tuples.csna janela do terminal para executar esta versão.Você adicionou formalidade à tupla que representa um valor
XeY. Você o tornou umrecordque definiu um tipo com nome e incluiu um membro para calcular o declive. Umrecordtipo é uma abreviação para umrecord class: umclasstipo que inclui comportamento extra.Você pode modificar o
Pointtipo para torná-lo umrecord structtambém:public record struct Point(int X, int Y)Um
record structé umstructtipo que inclui o comportamento extra adicionado a todos osrecordtipos.Experimente esta versão digitando
dotnet tuples.csna janela do terminal.
Tipos de estrutura, classe e interface
Todos os tipos nomeados concretos em C# são tipos class ou struct, incluindo record tipos. A class é um tipo de referência. A struct é um tipo de valor. Variáveis de um tipo de valor armazenam o conteúdo da instância diretamente na memória. Em outras palavras, um record struct Point armazena dois inteiros: X e Y. As variáveis de um tipo de referência armazenam uma referência, ou ponteiro, para o armazenamento da instância. Em outras palavras, um record class Point armazena uma referência a um bloco de memória que contém os valores para X e Y.
Na prática, isso significa que os tipos de valor são copiados quando atribuídos, mas uma cópia de uma instância de classe é uma cópia da referência. Essa referência copiada refere-se à mesma instância de um ponto, com o mesmo armazenamento para X e Y.
O modificador record, instrui o compilador a gravar vários membros para você. Você pode saber mais no artigo sobre tipos de registro na seção de conceitos básicos.
Ao declarar um record tipo, você declara que seu tipo deve usar um conjunto padrão de comportamentos para comparações de igualdade, atribuição e cópia de instâncias desse tipo. Os registros são a melhor opção quando o armazenamento de dados relacionados é a principal responsabilidade do seu tipo. À medida que você adiciona mais comportamentos, considere usar struct ou class tipos sem o record modificador.
Use struct tipos para tipos de valor quando precisar de um comportamento mais sofisticado, mas a principal responsabilidade é armazenar valores. Use class tipos para usar idiomas orientados a objetos, como encapsulamento, herança e polimorfismo.
Você também pode definir interface tipos para declarar contratos comportamentais que diferentes tipos devem implementar. Os tipos struct e class podem implementar interfaces.
Normalmente, você usa todos esses tipos em programas e bibliotecas maiores. Depois de instalar o SDK do .NET, você poderá explorar esses tipos usando tutoriais sobre classes na seção de conceitos básicos.
Você concluiu o tutorial "Criar tipos em C#". Você pode saber mais sobre tipos em C# nos seguintes artigos:
Recursos de limpeza
O GitHub exclui automaticamente o Codespace após 30 dias de inatividade. Se você planeja explorar mais tutoriais nesta série, pode deixar o seu Codespace provisionado. Se você estiver pronto para visitar o site do .NET para baixar o SDK do .NET, poderá excluir seu Codespace. Para excluir seu Codespace, abra uma janela do navegador e navegue até seus Codespaces. Você deve ver uma lista de seus codespaces na janela. Selecione os três pontos (...) na entrada para o codespace do tutorial de aprendizado e selecione excluir.