CodeGym /Cursos /C# SELF /Campos y métodos estáticos

Campos y métodos estáticos

C# SELF
Nivel 12 , Lección 1
Disponible

1. Campos del objeto: ahí el objeto guarda sus datos

En C# (y en la mayoría de los lenguajes de programación) se suele decir: «todo es un objeto». Un objeto es un “elemento virtual” en la memoria del ordenador, que puede guardar algo (datos) y saber hacer algo (métodos). O sea, un objeto tiene un estado (campos, datos) y un comportamiento (métodos).

Ejemplos de objetos:

  • Un gato en un juego (Cat)
  • Un usuario de una web (User)
  • Un libro en una biblioteca (Book)
  • Un coche en un parking (Car)

Cuando creas un objeto, es como si hicieras una copia de una plantilla (clase), y esa copia puede trabajar con sus propios datos.

Campos — son variables que “están dentro” del objeto y guardan sus datos individuales.

Ejemplo de la vida real

Cada gato tiene un nombre, una edad y un color. Estos datos son individuales — cada gato tiene los suyos.


public class Cat
{
    public string Name;  // Nombre del gato — campo del objeto
    public int Age;      // Edad del gato — campo del objeto
    public string Color; // Color del gato — campo del objeto
}
Ejemplo de declaración de campos de un objeto

Cuando creamos objetos:

Cat cat1 = new Cat();
cat1.Name = "Felix";
cat1.Age = 2;
cat1.Color = "gris";

Cat cat2 = new Cat();
cat2.Name = "Whiskers";
cat2.Age = 5;
cat2.Color = "negro";

¡Cada objeto tiene sus propios valores de campos!

Objeto Name Age Color
cat1 Felix 2 gris
cat2 Whiskers 5 negro

Un campo — es un “bolsillo” interno en el objeto donde puede guardar algo.

2. Métodos del objeto: lo que el objeto sabe hacer

Un método — es una “acción”, “habilidad” o “función” del objeto. Un método es un trozo de código que puedes “llamar” en el objeto.

Ejemplo de la vida real

Un gato tiene acciones: puede maullar, correr, comer.


public class Cat
{
    public string Name;
    public void Meow()
    {
        Console.WriteLine($"{Name} dice: ¡Miau!");
    }

    public void Sleep()
    {
        Console.WriteLine($"{Name} duerme.");
    }
}
Ejemplo de métodos de un objeto

Uso:

Cat cat1 = new Cat();
cat1.Name = "Felix";
cat1.Meow();   // Felix dice: ¡Miau!
cat1.Sleep();  // Felix duerme.

¡Cada objeto tiene sus propios métodos y usan sus propios campos!

3. Campos estáticos (static fields): datos comunes

A veces quieres guardar en un campo no datos individuales del objeto, sino información común para toda la clase. Por ejemplo, contar cuántos gatos se han creado en total, o poner un “volumen máximo” común para todos los gatos.

Para eso en C# se usan campos estáticos — se declaran con la palabra static.


public class Cat
{
    public string Name;
    public static int Count = 0; // Campo estático

    public Cat(string name)
    {
        Name = name;
        Count++; // Aumentamos el contador total de gatos
    }
}

//trabajando con la clase Cat         
Cat c1 = new Cat("Felix");
Cat c2 = new Cat("Whiskers");

Console.WriteLine(Cat.Count); // 2 — común para todos los objetos
Ejemplo de uso de un campo estático

Un campo estático es uno solo para toda la clase, lo “comparten” todos los objetos.
Se suele acceder a él usando el nombre de la clase: Cat.Count.

4. Métodos estáticos (static methods)

Un método estático — es un método que no está ligado a un objeto concreto, sino que pertenece a toda la clase.

  • Ese método se puede llamar sin crear un objeto.
  • Dentro de un método estático no puedes acceder a campos y métodos normales (no estáticos) — ¡porque no hay un objeto concreto!

public class MathUtils
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}
Ejemplo de método estático

Uso:

int sum = MathUtils.Add(2, 3); // 5

Los métodos estáticos se usan mucho para utilidades — funciones que no dependen del estado de un objeto.

Ya conoces muchos métodos estáticos:

Console.WriteLine();
Console.ReadLine();

Math.Round();
Math.Truncate();

5. Comparando métodos y campos

¿Qué es? ¿Cómo declarar? ¿Dónde se guarda? ¿Para qué? ¿Cómo acceder?
Campo del objeto
public string Name;
En cada objeto Datos personales del objeto cat1.Name, cat2.Name
Método del objeto
public void Meow(){}
En cada objeto Acciones que usan los campos del objeto cat1.Meow()
Campo estático
public static int C;
Uno solo para toda la clase Datos comunes para todos los objetos Cat.C
Método estático
public static ...
Uno solo para toda la clase “Habilidades” comunes, que no dependen del objeto Cat.Method()

7. Ilustración

Campos y métodos normales:


.     +-----------------+
cat1: | Name = "Felix" |
      | Age = 2         |
      +-----------------+

      +------------------+
cat2: | Name = "Whiskers"   |
      | Age = 5          |
      +------------------+

Campo estático Count:

Cat.Count = 2    // uno solo para todos los gatos

Llamada a métodos:

cat1.Meow();   // Felix dice: ¡Miau!
cat2.Meow();   // Whiskers dice: ¡Miau!

Llamada a método estático:

MathUtils.Add(2, 3); // 5

Resumen

  • Campos — son para las características individuales de cada objeto (propiedades).
  • Métodos — describen lo que sabe hacer el objeto.
  • Campos estáticos — sirven para guardar datos “comunes” (por ejemplo, un contador, configuraciones globales).
  • Métodos estáticos — se usan para operaciones que no dependen de un objeto concreto (por ejemplo, funciones matemáticas).

8. Preguntas frecuentes

¿Se puede acceder a un campo estático desde un objeto?
Técnicamente sí (cat1.Count), pero se recomienda acceder por la clase (Cat.Count), para no liarte tú ni a los demás.

¿Se puede llamar a un método no estático sin crear un objeto?
No, porque ese método siempre trabaja con un objeto concreto y sus datos.

¿Se pueden usar campos y métodos normales en un método estático?
No — porque el método estático no sabe a qué objeto acceder.

¿Se puede hacer una clase “totalmente estática”?
Sí, para eso se escribe static class — no se puede crear con new, y todos los miembros de esa clase deben ser estáticos.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION