C# 9.0 - Inteiros nativos e inferência de tipos \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 04 Horas 

 43 Min 

 35 Seg 

   Tempo restante da oferta: 04 43 35 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) C# 9.0 - Inteiros nativos e inferência de tipos  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

# C# 9.0 - Inteiros nativos e inferência de tipos

 Conheça os novos tipos de dados introduzidos no C# 9.0, os inteiros nativos e os novos recursos da inferência de tipos.

 [ Wladimilson M. Nascimento ](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento) 6 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/C-SHARP-PROPRIEDADES-INIT-RECORD.png)  

Finalizando a nossa série de posts sobre os novos recursos do [C# 9.0](https://www.treinaweb.com.br/blog/tag/c-9-0/). Neste artigo veremos dois novos recursos: inteiros nativos e melhorias na inferência de tipos.

## Inteiros nativos

Aplicações que processam muitas operações matemáticas e precisam garantir que essas operações utilizem o máximo que o processador pode fornecer, agora podem fazer uso dos inteiros nativos.

Inteiros nativos são dois novos tipos de dados representados pelas cláusulas `nint` e `nuint`. Nos bastidores elas são alias, respectivamente, dos tipos `System.IntPtr` and `System.UIntPtr`.

Em tempo de desenvolvimento não há diferença entre os tipos `int` e `nint`:

```csharp
int defaultInt = 55;
nint nativeInt = 55;

```

Entretanto, durante a execução da aplicação, se o computador for 32 bits, o `nint` se comportará como um inteiro de 32bits. Se ele for 64bits, o tipo de comportará como um inteiro de 64 bits.

Para garantir que não haverá perda de dados, pode ser utilizado as constantes `int.MinValue` e `int.MaxValue` para verificar o limite inferior e superior de valores.

## Melhorias na inferência de tipos

Chamado de *target typing*, a inferência de tipos é o processo onde o compilador infere o tipo de dado pelo contexto da expressão. Por exemplo:

```csharp
var nome = "Treinaweb";

```

Na expressão acima, o compilador sabe que `nome` é uma variável `string`, pois está sendo atribuído à ela uma string.

Quando este tipo não pode ser inferido, o tipo da variável deve ser especificado:

```csharp
string nome = null;

```

Pelo fato da variável `nome`, na expressão acima, receber o valor `null`, o seu tipo é especificado.

Antes do C# 9.0, a inferência de tipos era realizada fazendo o uso da cláusula `var`, limitando seus benefícios as declarações das variáveis/objetos. Agora na nova versão da linguagem, este recurso foi estendido a cláusula `new`.

### Inferência de tipos em “expressões new”

No C#, a sintaxe para declarar um novo objeto é `new T()`, sendo `T` o tipo do objeto que está sendo instanciado. No C# 9.0, caso este tipo já estiver sendo especificado, ele pode ser omitido da expressão `new`:

```csharp
Pessoa pessoa = new();

```

O compilador saberá qual construtor invocado baseado no tipo do objeto. Se este construtor receber algum parâmetro, este deve ser informado:

```csharp
Pessoa pessoa = new("Carlos");

```

Como o tipo do objeto precisa ser especificado na expressão, não é possível utilizar esta nova cláusula `new` com a cláusula `var`:

```csharp
var pessoa = new("Carlos");//Será gerado um erro

```

#### Quando houver sobrecarga de construtor e/ou parâmetros opcionais?

Mesmo omitindo o tipo, o `new` funciona da mesma forma que antes. Assim, mesmo se a classe declarar uma sobrecarga de construtor:

```csharp
class Pessoa {
  public string Nome { get; set; }

  public Pessoa() {}

  public Pessoa(string nome) {
    Nome = nome;
  }
}

```

O compilador saberá qual chamar de acordo com os parâmetros informados:

```csharp
Pessoa pessoa1 = new();
Pessoa pessoa2 = new("Thomas");

```

Isso também ocorre se o construtor possuir parâmetros opcionais:

```csharp
class Pessoa {
  public string Nome { get; set; }
  public string Tratamento { get; set; }

  public Pessoa(string nome = null, string tratamento = null) {
    Nome = nome;
    Tratamento = tratamento;
  }
}

```

```csharp
Pessoa pessoa1 = new("Thomas");
Pessoa pessoa2 = new("Carlos", "Sr.");

```

E também pode-se fazer uso de parâmetros nomeados:

```csharp
Pessoa pessoa3 = new(tratamento: "Sra.", nome:"Maria");

```

#### Porque usar o `new` se já há o `var`?

Se nos limitarmos apenas as declarações dos objetos. Uma expressão com o `new`:

```csharp
Pessoa pessoa = new("Thomas");

```

E uma expressão com o `var`:

```csharp
var pessoa = new Pessoa("Thomas");

```

Irão gerar o mesmo código intermediário. Então nessa situação, o uso de um ou de outro irá depender das preferências do desenvolvedor. Nenhuma das duas expressões irá tornar o código mais ou menos performático.

Entretanto, em situações onde o uso do `var` não é possível e é que a nova expressão `new` brilha, como na inicialização das propriedades de uma classe:

```csharp
public class Curso
{
    public Curso()
    {
        Alunos = new();
    }
    public List Alunos { get; }
}

```

O código acima poderia ser resumido para:

```csharp
public class Curso
{
    public List Alunos { get; } = new();
}

```

Melhorando ainda mais a sua legibilidade.

## Conclusão

A nona versão do C# trouxe uma leva de novos recursos que visam principalmente melhorar a legibilidade do código e facilitar a vida do desenvolvedor. Assim como ocorre sempre, esses recursos serão adotados aos poucos, conforme novos projetos sejam criados e os antigos sejam migrados para esta nova versão da linguagem.

Então, caso não tenha visto os dois primeiros artigos desta série, recomendo que volte e veja como trabalhar com [propriedades init e record](https://www.treinaweb.com.br/blog/c-9-0-propriedades-init-e-record/) e [programas top-level e os novos recursos do pattern matching](https://www.treinaweb.com.br/blog/c-9-0-programas-top-level-e-pattern-matching/).

Por hoje é só. Até a próxima.

- [ #C# ](https://www.treinaweb.com.br/blog/tag/csharp)
- [ #C# 9.0 ](https://www.treinaweb.com.br/blog/tag/c-9-0)

Autor

 ![Wladimilson M. Nascimento](//secure.gravatar.com/avatar/f0dd442f156a3eacd2880e9cd0eafbd1?d=mm)

## Wladimilson M. Nascimento

 Instrutor, nerd, cinéfilo e desenvolvedor nas horas vagas. Graduado em Ciências da Computação pela Universidade Metodista de São Paulo. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/05/01125223/react-php-imagem-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Introdução à programação assíncrona em PHP usando o ReactPHP ](https://www.treinaweb.com.br/blog/introducao-a-programacao-assincrona-em-php-usando-o-reactphp) 

     Uma introdução à programação assíncrona com PHP e uso básico dos componentes do ReactPHP.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/03/01111116/jogo-feito-400x280.png)  [ Desenvolvimento de Jogos ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-de-jogos) 

     9 anos atrás

    ##  [ Como um jogo digital é criado? ](https://www.treinaweb.com.br/blog/como-um-jogo-digital-e-criado) 

     Veja nesse artigo como um jogo digital é criado e os principais conceitos envolvidos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/05/como-instalar-o-csharp-e-nosso-primeiro-exemplo-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     5 anos atrás

    ##  [ Conhecendo variáveis e constantes no C# ](https://www.treinaweb.com.br/blog/conhecendo-variaveis-e-constantes-no-csharp) 

     Conheça neste artigo os tipos de dados presentes no C# e a sintaxe para que possamos declarar variáveis e constantes.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/03/como-instalar-o-dart-e-executar-seu-primeiro-exemplo-400x280.png)  [ Dart ](https://www.treinaweb.com.br/blog/categoria/dart) 

     6 anos atrás

    ##  [ Conhecendo variáveis e constantes no Dart ](https://www.treinaweb.com.br/blog/conhecendo-variaveis-e-constantes-no-dart) 

     Neste artigo conheceremos as variáveis e constantes no Dart.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/12/MODULARIZAÇÃO-400x280.png)  [ Algoritmos ](https://www.treinaweb.com.br/blog/categoria/algoritmos) 

     6 anos atrás

    ##  [ Modularização: Funções e Procedimentos ](https://www.treinaweb.com.br/blog/modularizacao-funcoes-e-procedimentos) 

     Entenda o conceito de modularização e a utilização de funções e procedimentos no desenvolvimento de software.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/tostring-400x280.jpg)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     10 anos atrás

    ##  [ Para que servem os métodos ToString(), Equals() e GetHashCode()? ](https://www.treinaweb.com.br/blog/para-que-servem-os-metodos-tostring-equals-e-gethashcode) 

     Neste artigo vamos entender como funcionam e para que servem os métodos ToString(), Equals() e GetHashCode() em linguagens baseadas no .NET e no Java.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Entendendo ponteiros na Golang ](https://www.treinaweb.com.br/blog/entendendo-ponteiros-na-golang) 

     Neste artigo veremos sobre os ponteiros na Golang. Vamos entender o que são ponteiros, quais suas vantagens e desvantagens e como utilizá-los.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/04195644/php-background-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Estrutura interna de valor, referências e gerenciamento de memória no PHP ](https://www.treinaweb.com.br/blog/estrutura-interna-de-valor-referencias-e-gerenciamento-de-memoria-no-php) 

     Valores em PHP possuem que semântica? De valor ou de referência? Objetos são passados por referência? Essas são algumas das questões que esse artigo se propõe a responder.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/12/tipagem-no-python-com-type-hints-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Tipagem no Python com Type Hints ](https://www.treinaweb.com.br/blog/tipagem-no-python-com-type-hints) 

     Neste artigo vamos aprender sobre os Type Hints no Python, veremos como eles funcionam e como podem nos ajudar a escrever códigos mais legíveis.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/05/como-instalar-o-csharp-e-nosso-primeiro-exemplo-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     4 anos atrás

    ##  [ Guia da linguagem C# ](https://www.treinaweb.com.br/blog/guia-da-linguagem-csharp) 

     Nesse guia de C# você aprenderá o necessário para criar os seus primeiros softwares com a linguagem de programação C#. Acesse agora mesmo!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/08/java-csharp-ou-php-qual-linguagem-escolher-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     9 anos atrás

    ##  [ Java, C# ou PHP: qual linguagem escolher? ](https://www.treinaweb.com.br/blog/java-csharp-ou-php-qual-linguagem-escolher) 

     Qual linguagem escolher? Java, C# ou PHP? Quais são as vantagens de cada uma? Vamos analisar estas dúvidas que são comuns para quem está começando.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/hacker-400x280.png)  [ C ](https://www.treinaweb.com.br/blog/categoria/c) 

     10 anos atrás

    ##  [ Criação de um Keylogger em C ](https://www.treinaweb.com.br/blog/criacao-de-um-keylogger-em-c) 

     Veja nesse artigo o que é e como se dá o desenvolvimento de um simples Keylogger em C.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **04h 43min 35s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
