Da trilha de C# Este conceito ainda não saiu como card do dia. ir para o card de hoje

C# Fundamentos Básico

Variáveis e tipos

Em C#, toda variável tem um tipo, que define quais valores ela pode armazenar e quais operações são permitidas. Os tipos se dividem em tipos de valor (como int, double, bool, struct) e tipos de referência (como string, arrays, classes). Tipos de valor guardam o dado diretamente na variável (na pilha), enquanto tipos de referência guardam um endereço para o objeto no heap. Isso afeta cópia, comparação e alocação de memória.

A palavra-chave var permite declarar variáveis com inferência de tipo: o compilador descobre o tipo a partir da expressão de inicialização. var não é "sem tipo", é apenas açúcar sintático. Já as conversões podem ser implícitas (quando não há perda de dados) ou explícitas (com cast, quando pode haver perda).

Para valores que não devem mudar, usamos const (constante em tempo de compilação, embutida no código) e readonly (campo que só pode ser atribuído na declaração ou no construtor, mas calculado em tempo de execução). Entender essas diferenças evita bugs e deixa o código mais expressivo.

Pontos-chave

  • Tipos de valor (int, double, bool, struct) copiam o dado; tipos de referência (string, arrays, classes) copiam a referência.
  • var infere o tipo em tempo de compilação e exige inicialização na mesma linha.
  • Conversões implícitas são seguras; explícitas (cast) podem perder dados e precisam de atenção.
  • const é resolvido em tempo de compilação e só aceita tipos primitivos e string; readonly pode ser calculado no construtor.
VariaveisTipos.cs
using System;

class Program
{
    // const: valor fixo em tempo de compilação
    const double Pi = 3.14159;

    // readonly: pode ser atribuído no construtor
    readonly int anoAtual;

    public Program(int ano)
    {
        anoAtual = ano; // atribuição permitida apenas aqui
    }

    static void Main()
    {
        // var: inferência de tipo
        var nome = "Ana";          // string (referência)
        var idade = 30;            // int (valor)
        var altura = 1.65;         // double (valor)

        Console.WriteLine($"{nome} tem {idade} anos e {altura} m");

        // Conversão implícita (int -> double)
        double media = idade / 2.0;
        Console.WriteLine($"Média: {media}");

        // Conversão explícita (double -> int) com cast
        int anosAproximados = (int)altura;
        Console.WriteLine($"Anos aproximados: {anosAproximados}");

        // Tipos de valor vs referência
        int a = 10;
        int b = a; // cópia do valor
        b = 20;
        Console.WriteLine($"a={a}, b={b}"); // a=10, b=20

        int[] arr1 = { 1, 2, 3 };
        int[] arr2 = arr1; // cópia da referência
        arr2[0] = 99;
        Console.WriteLine($"arr1[0]={arr1[0]}"); // 99

        // const e readonly
        Console.WriteLine($"Pi={Pi}, anoAtual={new Program(2025).anoAtual}");
    }
}

Exercícios

  1. 1
    Fácil

    Declarando variáveis com var e tipos explícitos

    Crie um programa que declare três variáveis: uma string com seu nome, um int com sua idade e um double com sua altura. Use var para todas. Depois, imprima uma frase no formato Meu nome é [nome], tenho [idade] anos e [altura] m de altura.

    Resolver
  2. 2
    Médio

    Conversões e cópia de valor vs referência

    Escreva um programa que: (1) declare int a = 5 e int b = a, depois altere b para 10 e mostre os valores; (2) declare um array int[] x = {1,2,3} e int[] y = x, altere y[0] = 99 e mostre x[0]; (3) faça uma conversão implícita de int para double e uma explícita de double para int com cast, mostrando os resultados.

    Resolver
  3. 3
    Desafio

    const, readonly e cálculo de área

    Crie uma classe Circulo com um campo const double Pi = 3.14159 e um campo readonly double raio. O construtor recebe o raio. Adicione um método CalcularArea() que retorna Pi * raio * raio. No Main, instancie dois círculos com raios diferentes, imprima suas áreas e mostre que Pi é acessível via Circulo.Pi (é uma constante estática implícita).

    Resolver

Continue estudando