🎓 Aulas de Programação Orientada a Objetos

Universo DC - Aprenda POO com exemplos práticos

Objetivo da Aula

Entender o conceito de classes e membros estáticos (static) em C#.

Aula 08: Classes e Membros Estáticos


Conceito de Static

O que é Static?

Static significa que o membro pertence à classe, não a uma instância específica. Não precisa criar um objeto para usar. Analogia: É como um número de telefone de emergência (190). Não pertence a uma pessoa específica, é um número geral que todos podem usar.

Membros Estáticos

Métodos Estáticos

// TÓPICO: Classe com Métodos Estáticos
public class LigaJustica
{
    // TÓPICO: Método Estático
    // 'static' significa que pertence à classe, não a um objeto
    // Pode ser chamado sem criar instância: LigaJustica.ConvocarHerois()
    public static void ConvocarHerois()
    {
        Console.WriteLine("Liga da Justiça convocada!");
    }

    // TÓPICO: Método Estático com Parâmetros
    public static void AdicionarHeroi(string nome)
    {
        Console.WriteLine($"{nome} foi adicionado à Liga da Justiça!");
    }

    // TÓPICO: Método Estático com Retorno
    public static int ContarHerois()
    {
        return 7; // Liga da Justiça tem 7 membros principais
    }
}

// TÓPICO: Usando Métodos Estáticos
// NÃO precisa criar objeto: LigaJustica heroi = new LigaJustica();
LigaJustica.ConvocarHerois();        // ✅ Chama diretamente da classe
LigaJustica.AdicionarHeroi("Batman"); // ✅ Chama com parâmetro
int total = LigaJustica.ContarHerois(); // ✅ Retorna valor

Propriedades Estáticas

// TÓPICO: Classe com Propriedades Estáticas
public class LegiaoMal
{
    // TÓPICO: Propriedade Estática
    // Pertence à classe, compartilhada por todos
    public static int TotalMembros { get; set; }

    public static string Lider { get; set; }

    // TÓPICO: Propriedade Estática Somente Leitura
    public static string NomeOrganizacao { get; } = "Legião do Mal";

    // TÓPICO: Método Estático
    public static void AdicionarMembro(string nome)
    {
        TotalMembros++;
        Console.WriteLine($"{nome} foi adicionado à {NomeOrganizacao}!");
        Console.WriteLine($"Total de membros: {TotalMembros}");
    }
}

// TÓPICO: Usando Propriedades Estáticas
LegiaoMal.Lider = "Darkseid";
LegiaoMal.AdicionarMembro("Coringa");
LegiaoMal.AdicionarMembro("Lex Luthor");
Console.WriteLine($"Líder: {LegiaoMal.Lider}");
Console.WriteLine($"Total: {LegiaoMal.TotalMembros}");

Classe Estática Completa

// TÓPICO: Classe Estática
// 'static class' - não pode ser instanciada, só tem membros estáticos
public static class UtilitariosDC
{
    // TÓPICO: Constante Estática
    public const int NIVEL_MAXIMO = 100;
    public const int NIVEL_MINIMO = 1;

    // TÓPICO: Método Estático de Utilidade
    public static bool ValidarNivel(int nivel)
    {
        return nivel >= NIVEL_MINIMO && nivel <= NIVEL_MAXIMO;
    }

    // TÓPICO: Método Estático para Calcular Força
    public static double CalcularForca(int nivel, int experiencia)
    {
        return nivel * 10 + experiencia * 0.5;
    }

    // TÓPICO: Método Estático para Formatar Nome
    public static string FormatarNome(string nome)
    {
        return nome.ToUpper();
    }
}

// TÓPICO: Usando Classe Estática
// NÃO pode fazer: UtilitariosDC util = new UtilitariosDC(); ❌
bool valido = UtilitariosDC.ValidarNivel(85);  // ✅
double forca = UtilitariosDC.CalcularForca(85, 1000);  // ✅
string nome = UtilitariosDC.FormatarNome("batman");  // ✅

Comparação: Estático vs Instância

AspectoEstático (Static)Instância (Normal)
Pertence aClasseObjeto
CriaçãoNão precisa de newPrecisa de new
AcessoClasse.Metodo()objeto.Metodo()
CompartilhadoSim (todos compartilham)Não (cada objeto tem seu próprio)
Quando usarUtilidades, constantesDados específicos do objeto

Resumo