Menu
Coddy logo textTech

Campos y métodos estáticos

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy. Lección 12 de 70.

Hasta ahora, cada campo y método que hemos creado pertenece a objetos individuales. Pero a veces necesitas datos o comportamientos que pertenecen a la clase misma, compartidos entre todas las instancias. Ahí es donde entra la palabra clave static.

Un campo estático es compartido por todos los objetos de una clase. Solo hay una copia, sin importar cuántas instancias crees:

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

Cada vez que se crea un nuevo Player, TotalPlayers aumenta. Todos los jugadores comparten este mismo contador.

Un método estático pertenece a la clase y puede ser llamado sin crear un objeto:

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

// Llamado en la clase, no en una instancia
int result = Calculator.Add(5, 3);

Observa que accedes a los miembros estáticos utilizando el nombre de la clase, no una referencia de objeto. Los métodos estáticos no pueden acceder a campos de instancia ni utilizar this, ya que no pertenecen a ningún objeto específico.

Ya has utilizado miembros estáticos sin darte cuenta. Console.WriteLine() es un método estático y Math.PI es un campo estático.

challenge icon

Desafío

Fácil

Construyamos un sistema de seguimiento de pedidos que utilice miembros estáticos para llevar un registro de todos los pedidos realizados en tu aplicación.

Crearás dos archivos para organizar tu código:

  • Order.cs: Define una clase Order en el espacio de nombres OrderSystem. Cada pedido debe tener una propiedad de instancia OrderId (int) y CustomerName (string). La clase también debe llevar un registro del número total de pedidos creados mediante un campo estático TotalOrders y proporcionar un método estático GetNextOrderId() que devuelva el siguiente ID de pedido disponible (a partir de 1). El constructor debe aceptar un nombre de cliente, asignar automáticamente el ID del pedido mediante el método estático e incrementar el recuento total de pedidos.
  • Program.cs: En tu archivo principal, crea pedidos a partir de la entrada y muestra sus detalles junto con el recuento total de pedidos.

Recibirás dos entradas que representan los nombres de los clientes de dos pedidos distintos.

Para cada pedido, imprime sus detalles con este formato:

Order #{OrderId} - Customer: {CustomerName}

Después de crear ambos pedidos, imprime el recuento total:

Total Orders: {TotalOrders}

Por ejemplo, si las entradas son Alice y Bob, la salida debe ser:

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

Pruébalo tú mismo

using System;
using OrderSystem;

class Program
{
    public static void Main(string[] args)
    {
        // Leer nombres de clientes
        string customer1 = Console.ReadLine();
        string customer2 = Console.ReadLine();

        // TODO: Crear dos objetos Order con los nombres de los clientes

        // TODO: Imprimir los detalles de cada pedido en el formato:
        // Order #{OrderId} - Customer: {CustomerName}

        // TODO: Imprimir el recuento total de pedidos en el formato:
        // Total Orders: {TotalOrders}
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C# online