Menu
Coddy logo textTech

Campos e Métodos Estáticos

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 12 de 70.

Até agora, cada campo e método que criamos pertence a objetos individuais. Mas às vezes você precisa de dados ou comportamentos que pertençam à própria classe, compartilhados entre todas as instâncias. É aí que entra a palavra-chave static.

Um campo estático é compartilhado por todos os objetos de uma classe. Existe apenas uma cópia, não importa quantas instâncias você crie:

public class Player
{
    public static int TotalPlayers = 0;
    public string Name { get; set; }
    
    public Player(string name)
    {
        Name = name;
        TotalPlayers++;
    }
}

Toda vez que um novo Player é criado, o TotalPlayers aumenta. Todos os jogadores compartilham este mesmo contador.

Um método estático pertence à classe e pode ser chamado sem criar um objeto:

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// Chamado na classe, não em uma instância
int result = Calculator.Add(5, 3);

Observe que você acessa membros estáticos usando o nome da classe, não uma referência de objeto. Métodos estáticos não podem acessar campos de instância ou usar this, pois não pertencem a nenhum objeto específico.

Você já usou membros estáticos sem perceber. Console.WriteLine() é um método estático, e Math.PI é um campo estático.

challenge icon

Desafio

Fácil

Vamos construir um sistema de rastreamento de pedidos que utiliza membros estáticos para acompanhar todos os pedidos feitos em sua aplicação.

Você criará dois arquivos para organizar seu código:

  • Order.cs: Defina uma classe Order no namespace OrderSystem. Cada pedido deve ter uma propriedade de instância OrderId (int) e CustomerName (string). A classe também deve rastrear o número total de pedidos criados usando um campo estático TotalOrders, e fornecer um método estático GetNextOrderId() que retorna o próximo ID de pedido disponível (começando em 1). O construtor deve aceitar um nome de cliente, atribuir automaticamente o ID do pedido usando o método estático e incrementar a contagem total de pedidos.
  • Program.cs: No seu arquivo principal, crie pedidos com base na entrada e exiba seus detalhes junto com a contagem total de pedidos.

Você receberá duas entradas representando nomes de clientes para dois pedidos separados.

Para cada pedido, imprima seus detalhes neste formato:

Order #{OrderId} - Customer: {CustomerName}

Após criar ambos os pedidos, imprima a contagem total:

Total Orders: {TotalOrders}

Por exemplo, se as entradas forem Alice e Bob, a saída deve ser:

Order #1 - Customer: Alice
Order #2 - Customer: Bob
Total Orders: 2

Folha de consulta

A palavra-chave static cria membros que pertencem à própria classe, em vez de instâncias individuais.

Campos estáticos são compartilhados entre todos os objetos de uma classe. Existe apenas uma cópia, independentemente de quantas instâncias sejam criadas:

public class Player
{
    public static int TotalPlayers = 0;
    public string Name { get; set; }
    
    public Player(string name)
    {
        Name = name;
        TotalPlayers++;
    }
}

Métodos estáticos pertencem à classe e podem ser chamados sem a criação de um objeto:

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// Chamado na classe, não em uma instância
int result = Calculator.Add(5, 3);

Membros estáticos são acessados usando o nome da classe, não uma referência de objeto. Métodos estáticos não podem acessar campos de instância ou usar this, pois não pertencem a nenhum objeto específico.

Exemplos comuns de membros estáticos incluem Console.WriteLine() (método estático) e Math.PI (campo estático).

Experimente você mesmo

using System;
using OrderSystem;

class Program
{
    public static void Main(string[] args)
    {
        // Ler os nomes dos clientes
        string customer1 = Console.ReadLine();
        string customer2 = Console.ReadLine();

        // TODO: Criar dois objetos Order com os nomes dos clientes

        // TODO: Imprimir os detalhes de cada pedido no formato:
        // Order #{OrderId} - Customer: {CustomerName}

        // TODO: Imprimir a contagem total de pedidos no formato:
        // Total Orders: {TotalOrders}
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos