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
}
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.");
}
}
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
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;
}
}
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 | |
En cada objeto | Datos personales del objeto | cat1.Name, cat2.Name |
| Método del objeto | |
En cada objeto | Acciones que usan los campos del objeto | cat1.Meow() |
| Campo estático | |
Uno solo para toda la clase | Datos comunes para todos los objetos | Cat.C |
| Método estático | |
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.
GO TO FULL VERSION