Métodos e campos estáticos
Defina membros que pertencem ao próprio tipo.
Métodos e campos estáticos é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.
Estático versus de instância
Um membro de instância pertence a cada objeto; um membro estático pertence à própria classe. Existe exatamente uma cópia de um membro estático, compartilhada por todos.
using System;
class Counter
{
public static int Total; // shared
public int Id; // per instance
}
class Program
{
static void Main()
{
Counter.Total = 5;
Console.WriteLine("Shared Total: " + Counter.Total);
}
}Declarando campos estáticos
Um campo static é acessado por meio do nome da classe, e não de uma instância: ClassName.Field.
using System;
class Bank
{
public static decimal InterestRate = 0.05m;
}
class Program
{
static void Main()
{
Console.WriteLine("Rate: " + Bank.InterestRate);
}
}Métodos estáticos
Um método static é executado sem uma instância. Você o chama pela classe. Ele não pode usar campos de instância porque não existe this.
using System;
class MathUtil
{
public static int Square(int x)
{
return x * x;
}
}
class Program
{
static void Main()
{
Console.WriteLine(MathUtil.Square(7));
}
}Estado compartilhado entre instâncias
Como um campo estático tem uma única cópia, todas as instâncias veem o mesmo valor. Isso é útil para contadores e configurações compartilhadas.
using System;
class Robot
{
public static int Count;
public Robot()
{
Count++;
}
}
class Program
{
static void Main()
{
new Robot();
new Robot();
new Robot();
Console.WriteLine("Robots created: " + Robot.Count);
}
}Métodos estáticos não podem usar dados de instância
Um método estático não tem this, portanto só pode usar parâmetros, variáveis locais e outros membros estáticos.
using System;
class Calculator
{
public static int Add(int a, int b) => a + b;
public static int Multiply(int a, int b) => a * b;
}
class Program
{
static void Main()
{
Console.WriteLine(Calculator.Add(2, 3));
Console.WriteLine(Calculator.Multiply(4, 5));
}
}Combinando estático e de instância
Uma classe pode conter os dois tipos. Métodos de instância podem ler membros estáticos, mas métodos estáticos não podem ler membros de instância.
using System;
class Account
{
public static decimal Fee = 2m;
public decimal Balance;
public decimal NetBalance()
{
return Balance - Fee; // instance method can read static
}
}
class Program
{
static void Main()
{
var a = new Account { Balance = 100m };
Console.WriteLine("Net: " + a.NetBalance());
}
}Padrão de contadores estáticos
Atribuir a cada novo objeto um identificador proveniente de um contador estático é um uso clássico de campos estáticos.
using System;
class Ticket
{
private static int _next = 1;
public int Number;
public Ticket()
{
Number = _next++;
}
}
class Program
{
static void Main()
{
Console.WriteLine(new Ticket().Number);
Console.WriteLine(new Ticket().Number);
Console.WriteLine(new Ticket().Number);
}
}Métodos auxiliares estáticos
Métodos estáticos são excelentes para operações sem estado que dependem apenas de suas entradas, como formatadores e conversores.
using System;
class Format
{
public static string Money(decimal amount)
{
return "$" + amount.ToString("0.00");
}
}
class Program
{
static void Main()
{
Console.WriteLine(Format.Money(12.5m));
}
}Chamando métodos estáticos a partir de métodos estáticos
Métodos estáticos podem chamar livremente outros métodos estáticos da mesma classe, sem nenhuma instância.
using System;
class Geometry
{
public static double CircleArea(double r) => Math.PI * Square(r);
private static double Square(double x) => x * x;
}
class Program
{
static void Main()
{
Console.WriteLine(Geometry.CircleArea(2).ToString("0.00"));
}
}Campos estáticos persistem
Um campo estático mantém seu valor durante toda a vida útil do programa, e não apenas durante a existência de um objeto. Use isso para caches ou totais acumulados.
using System;
class Logger
{
public static int MessageCount;
public static void Log(string msg)
{
MessageCount++;
Console.WriteLine("[" + MessageCount + "] " + msg);
}
}
class Program
{
static void Main()
{
Logger.Log("start");
Logger.Log("working");
Logger.Log("done");
}
}Reunindo tudo
Membros estáticos representam conceitos que abrangem toda a classe: taxas compartilhadas, contadores e auxiliares sem estado, enquanto membros de instância armazenam dados específicos de cada objeto.
using System;
class Order
{
public static decimal TaxRate = 0.10m;
public decimal Subtotal;
public decimal Total() => Subtotal + Subtotal * TaxRate;
}
class Program
{
static void Main()
{
var o = new Order { Subtotal = 200m };
Console.WriteLine("Total: " + o.Total());
}
}Verificação rápida
Teste sua compreensão sobre membros estáticos.
Recapitulação
Membros estáticos pertencem à classe e têm uma única cópia compartilhada; membros de instância pertencem a cada objeto. Métodos estáticos não têm this e não podem acessar dados de instância, mas o código de instância pode ler membros estáticos. Use membros estáticos para contadores, configurações compartilhadas e auxiliares sem estado.
using System;
class Demo
{
public static int Shared;
public int Own;
public static void Bump() => Shared++;
}
class Program
{
static void Main()
{
Demo.Bump();
Demo.Bump();
Console.WriteLine(Demo.Shared);
}
}Perguntas Frequentes
A aula “Métodos e campos estáticos” é grátis?
Sim — o texto completo de “Métodos e campos estáticos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.
O que vou aprender em “Métodos e campos estáticos”?
Defina membros que pertencem ao próprio tipo. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Métodos e campos estáticos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Métodos e campos estáticos
- Classes estáticas para utilitários
- Constantes e campos readonly
- Design estático versus de instância