Universo DC - Aprenda POO com exemplos práticos
Entender o conceito de classes e membros estáticos (static) em C#.
// 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
// 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}");
// 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"); // ✅
| Aspecto | Estático (Static) | Instância (Normal) |
|---|---|---|
| Pertence a | Classe | Objeto |
| Criação | Não precisa de new | Precisa de new |
| Acesso | Classe.Metodo() | objeto.Metodo() |
| Compartilhado | Sim (todos compartilham) | Não (cada objeto tem seu próprio) |
| Quando usar | Utilidades, constantes | Dados específicos do objeto |