1. Campos do objeto: onde o objeto guarda seus dados
Em C# (e na real, na maioria das linguagens de programação) a galera costuma dizer: “tudo é objeto”. Objeto é tipo um “item virtual” na memória do PC, que pode guardar alguma coisa (dados) e fazer alguma coisa (métodos). Ou seja, o objeto tem um estado (campos, dados) e um comportamento (métodos).
Exemplos de objetos:
- Gato no jogo (Cat)
- Usuário do site (User)
- Livro na biblioteca (Book)
- Carro no estacionamento (Car)
Quando você cria um objeto — é como se você fizesse uma cópia de um molde (classe), e essa cópia pode mexer nos próprios dados.
Campos — são variáveis que “ficam dentro” do objeto e guardam os dados individuais dele.
Exemplo da vida real
Todo gato tem nome, idade, cor. Esses dados são individuais — cada gato tem os seus.
public class Cat
{
public string Name; // Nome do gato — campo do objeto
public int Age; // Idade do gato — campo do objeto
public string Color; // Cor do gato — campo do objeto
}
Quando a gente cria os objetos:
Cat cat1 = new Cat();
cat1.Name = "Barsik";
cat1.Age = 2;
cat1.Color = "cinza";
Cat cat2 = new Cat();
cat2.Name = "Murka";
cat2.Age = 5;
cat2.Color = "preto";
Cada objeto tem seus próprios valores nos campos!
| Objeto | Name | Age | Color |
|---|---|---|---|
| cat1 | Barsik | 2 | cinza |
| cat2 | Murka | 5 | preto |
Campo — é tipo um “bolso” interno do objeto, onde ele pode guardar alguma coisa.
2. Métodos do objeto: o que o objeto sabe fazer
Método — é uma “ação”, “habilidade” ou “função” do objeto. Método é um pedaço de código que você pode “chamar” no objeto.
Exemplo da vida real
O gato tem ações: ele pode miar, correr, comer.
public class Cat
{
public string Name;
public void Meow()
{
Console.WriteLine($"{Name} diz: Miau!");
}
public void Sleep()
{
Console.WriteLine($"{Name} está dormindo.");
}
}
Usando:
Cat cat1 = new Cat();
cat1.Name = "Barsik";
cat1.Meow(); // Barsik diz: Miau!
cat1.Sleep(); // Barsik está dormindo.
Cada objeto tem seus próprios métodos, e eles usam os campos pessoais dele!
3. Campos estáticos (static fields): dados compartilhados
Às vezes a gente quer guardar num campo não os dados individuais do objeto, mas uma informação geral pra toda a classe. Tipo contar quantos gatos já foram criados, ou definir um “volume máximo” igual pra todos os gatos.
Pra isso, em C# a gente usa campos estáticos — eles são declarados com a palavra static.
public class Cat
{
public string Name;
public static int Count = 0; // Campo estático
public Cat(string name)
{
Name = name;
Count++; // Aumenta o contador geral de gatos
}
}
//trabalhando com a classe Cat
Cat c1 = new Cat("Barsik");
Cat c2 = new Cat("Murka");
Console.WriteLine(Cat.Count); // 2 — valor compartilhado entre todos os objetos
Campo estático é um só pra toda a classe, todos os objetos “compartilham” ele.
O jeito certo de acessar é pelo nome da classe: Cat.Count.
4. Métodos estáticos (static methods)
Método estático — é um método que não está ligado a um objeto específico, mas sim à classe toda.
- Dá pra chamar esse método sem criar um objeto.
- Dentro de um método estático não dá pra acessar campos e métodos normais (não estáticos) — porque não existe um objeto específico!
public class MathUtils
{
public static int Add(int a, int b)
{
return a + b;
}
}
Usando:
int sum = MathUtils.Add(2, 3); // 5
Métodos estáticos são muito usados pra utils — funções que não dependem do estado do objeto.
Você já conhece vários métodos estáticos:
Console.WriteLine();
Console.ReadLine();
Math.Round();
Math.Truncate();
5. Comparando métodos e campos
| O que é? | Como declarar? | Onde fica guardado? | Pra quê serve? | Como acessar? |
|---|---|---|---|---|
| Campo do objeto | |
Em cada objeto | Dados pessoais do objeto | cat1.Name, cat2.Name |
| Método do objeto | |
Em cada objeto | Ações que usam os campos do objeto | cat1.Meow() |
| Campo estático | |
Um só pra toda a classe | Dados compartilhados entre todos os objetos | Cat.C |
| Método estático | |
Um só pra toda a classe | “Habilidades” gerais, que não dependem do objeto | Cat.Method() |
7. Ilustração
Campos e métodos normais:
. +-----------------+
cat1: | Name = "Barsik" |
| Age = 2 |
+-----------------+
+------------------+
cat2: | Name = "Murka" |
| Age = 5 |
+------------------+
Campo estático Count:
Cat.Count = 2 // um só pra todos os gatos
Chamando métodos:
cat1.Meow(); // Barsik diz: Miau!
cat2.Meow(); // Murka diz: Miau!
Chamando método estático:
MathUtils.Add(2, 3); // 5
Resumo
- Campos — são as características individuais de cada objeto (propriedades).
- Métodos — descrevem o que o objeto sabe fazer.
- Campos estáticos — servem pra guardar dados “gerais” (tipo contador, configs globais).
- Métodos estáticos — são usados pra operações que não dependem de um objeto específico (tipo funções matemáticas).
8. Perguntas frequentes
Dá pra acessar um campo estático pelo objeto?
Tecnicamente — sim (cat1.Count), mas o certo é acessar pela classe (Cat.Count), pra não confundir você nem a galera.
Dá pra chamar um método não estático sem criar objeto?
Não, porque esse método sempre trabalha com um objeto específico e os dados dele.
Dá pra usar campos e métodos normais dentro de um método estático?
Não dá — porque o método estático não sabe pra qual objeto ele deveria olhar.
Dá pra fazer uma classe “totalmente estática”?
Sim, pra isso você escreve static class — não dá pra criar ela com new, e todos os membros dessa classe têm que ser estáticos.
GO TO FULL VERSION