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

C# POO Básico

Classes e objetos

Em C#, uma classe é um molde que define dados (campos) e comportamentos (métodos). Um objeto é uma instância dessa classe, criada com o operador new. Cada objeto tem sua própria cópia dos campos de instância, mas compartilha os membros static da classe.

O construtor é um método especial que inicializa o objeto quando ele é criado. Ele tem o mesmo nome da classe e não tem tipo de retorno. A palavra-chave this refere-se ao objeto atual e é útil para diferenciar campos de parâmetros com nomes iguais.

Membros static pertencem à classe, não a um objeto específico. Eles são acessados pelo nome da classe (ex.: Contador.Total) e não podem usar this. Já os membros de instância precisam de um objeto para serem acessados.

Neste card, você vai praticar a criação de classes com campos, métodos, construtores e membros estáticos, entendendo a diferença entre eles.

Pontos-chave

  • Uma classe define campos (dados) e métodos (comportamentos); um objeto é uma instância criada com new.
  • O construtor inicializa o objeto e tem o mesmo nome da classe, sem tipo de retorno.
  • this referencia o objeto atual e ajuda a distinguir campos de parâmetros homônimos.
  • Membros static pertencem à classe e são acessados pelo nome da classe, não por uma instância.
  • Cada objeto tem sua própria cópia dos campos de instância; membros estáticos são compartilhados.
Contador.cs
using System;

public class Contador
{
    // Campo de instância: cada objeto tem o seu.
    private int _valor;

    // Campo estático: compartilhado por todas as instâncias.
    private static int _totalObjetos;

    // Construtor: inicializa o valor e incrementa o contador estático.
    public Contador(int valorInicial)
    {
        _valor = valorInicial;
        _totalObjetos++;
    }

    // Método de instância: usa this para se referir ao objeto atual.
    public void Incrementar()
    {
        this._valor++;
    }

    // Propriedade somente leitura para acessar o valor.
    public int Valor => _valor;

    // Propriedade estática: acessada pela classe.
    public static int TotalObjetos => _totalObjetos;
}

public class Program
{
    public static void Main()
    {
        Contador c1 = new Contador(10);
        Contador c2 = new Contador(20);

        c1.Incrementar();
        c1.Incrementar();
        c2.Incrementar();

        Console.WriteLine($"c1.Valor = {c1.Valor}"); // 12
        Console.WriteLine($"c2.Valor = {c2.Valor}"); // 21
        Console.WriteLine($"Total de objetos = {Contador.TotalObjetos}"); // 2
    }
}

Exercícios

  1. 1
    Fácil

    Criando uma classe Pessoa

    Crie uma classe Pessoa com os campos Nome (string) e Idade (int). Adicione um construtor que recebe esses valores e um método Apresentar() que imprime Olá, meu nome é [Nome] e tenho [Idade] anos. No Main, crie duas pessoas e chame Apresentar() para cada uma.

    Resolver
  2. 2
    Médio

    Contador com membro estático

    Crie uma classe Contador com um campo de instância Valor (int) e um campo estático TotalInstancias (int). O construtor sem parâmetros deve inicializar Valor com 0 e incrementar TotalInstancias. Adicione um método Incrementar() que aumenta Valor em 1. No Main, crie três contadores, incremente o primeiro duas vezes e o segundo uma vez, e exiba o valor de cada contador e o total de instâncias criadas.

    Resolver
  3. 3
    Desafio

    Classe Produto com this e estáticos

    Crie uma classe Produto com campos de instância Nome (string) e Preco (decimal), e um campo estático TotalProdutos (int). O construtor deve receber nome e preco e usar this para diferenciar os parâmetros dos campos. Incremente TotalProdutos no construtor. Adicione um método AplicarDesconto(decimal percentual) que reduz o preço em percentual por cento. No Main, crie dois produtos, aplique 10% de desconto no primeiro e 5% no segundo, e exiba o nome, o preço final e o total de produtos criados.

    Resolver

Continue estudando