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

Campos e métodos estáticos

C# SELF
Nível 12 , Lição 1
Disponível

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
}
Exemplo de declaração de campos 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.");
    }
}
Exemplo de métodos do objeto

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
Exemplo de uso de campo estático

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;
    }
}
Exemplo de método estático

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
public string Name;
Em cada objeto Dados pessoais do objeto cat1.Name, cat2.Name
Método do objeto
public void Meow(){}
Em cada objeto Ações que usam os campos do objeto cat1.Meow()
Campo estático
public static int C;
Um só pra toda a classe Dados compartilhados entre todos os objetos Cat.C
Método estático
public static ...
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.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION