Classes Estáticas
Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 13 de 70.
Quando uma classe contém apenas membros estáticos e você nunca precisa criar instâncias dela, você pode declarar a classe inteira como static. Isso informa ao compilador que a classe não pode ser instanciada e pode conter apenas membros estáticos.
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}Você usa classes estáticas da mesma forma que usa membros estáticos, chamando-os diretamente pelo nome da classe:
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;Classes estáticas têm restrições importantes. Você não pode criar uma instância com new, elas não podem ter construtores de instância e não podem ser herdadas. Elas podem conter apenas campos, propriedades e métodos estáticos.
As classes Console e Math que você tem usado são exemplos perfeitos de classes estáticas. Elas fornecem funcionalidades utilitárias sem a necessidade de estado de objeto. Classes estáticas são ideais para agrupar métodos auxiliares relacionados ou constantes que não exigem nenhum dado específico da instância.
Desafio
FácilVamos construir um utilitário de conversão de temperatura usando uma classe estática para agrupar métodos auxiliares relacionados que não exigem nenhum estado de objeto.
Você criará dois arquivos para organizar seu código:
TemperatureConverter.cs: Defina uma classe estática chamadaTemperatureConverterno namespaceUtilities. Esta classe deve conter:- Um campo estático
AbsoluteZeroCelsiusdefinido como-273.15 - Um método estático
CelsiusToFahrenheit(double celsius)que converte Celsius para Fahrenheit usando a fórmula:(celsius * 9 / 5) + 32 - Um método estático
FahrenheitToCelsius(double fahrenheit)que converte Fahrenheit para Celsius usando a fórmula:(fahrenheit - 32) * 5 / 9 - Um método estático
IsAboveAbsoluteZero(double celsius)que retornatruese a temperatura estiver acima do zero absoluto
- Um campo estático
Program.cs: No seu arquivo principal, use a classe estática para realizar as conversões. Leia um valor de temperatura em Celsius da entrada e, em seguida, exiba as conversões e a validação.
Você receberá uma entrada: um valor de temperatura em Celsius.
Imprima os resultados neste formato:
{celsius}C = {fahrenheit}F
{fahrenheit}F = {convertedBack}C
Above Absolute Zero: {True/False}
Absolute Zero: {AbsoluteZeroCelsius}CPor exemplo, se a entrada for 25, a saída deve ser:
25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15CLembre-se de que classes estáticas não podem ser instanciadas - você chamará todos os métodos diretamente pelo nome da classe, como TemperatureConverter.CelsiusToFahrenheit(25).
Folha de consulta
Uma classe static só pode conter membros estáticos e não pode ser instanciada. Ela é usada para agrupar métodos utilitários e constantes relacionados que não exigem estado de objeto.
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}Membros de classe estática são acessados diretamente pelo nome da classe:
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;Restrições de classes estáticas:
- Não podem ser instanciadas com
new - Não podem ter construtores de instância
- Não podem ser herdadas
- Só podem conter campos, propriedades e métodos estáticos
Exemplos comuns incluem as classes Console e Math, que fornecem funcionalidade utilitária sem a necessidade de estado de objeto.
Experimente você mesmo
using System;
using Utilities;
class Program
{
public static void Main(string[] args)
{
// Lê a temperatura em Celsius
double celsius = Convert.ToDouble(Console.ReadLine());
// TODO: Use os métodos estáticos de TemperatureConverter para:
// 1. Converter celsius para fahrenheit
// 2. Converter fahrenheit de volta para celsius
// 3. Verificar se a temperatura está acima do zero absoluto
// 4. Obter a constante do zero absoluto
// TODO: Imprima os resultados no formato exigido:
// {celsius}C = {fahrenheit}F
// {fahrenheit}F = {convertedBack}C
// Above Absolute Zero: {True/False}
// Absolute Zero: {AbsoluteZeroCelsius}C
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosNamespaces e DiretivasIntrodução a Classes e ObjetosA Palavra-chave 'this'Métodos e ParâmetrosCampos vs PropriedadesConstrutoresInicializadores de ObjetosRecapitulação - Calculadora Simples4Herança
Sintaxe Básica de Herança (:)A Palavra-chave 'base'Palavras-chave Virtual e OverrideClasses SeladasA Classe Base 'object'Recapitulação - Hierarquia de Funcionários7Recursos Avançados
Sobrecarga de OperadoresIndexadores (this[])Sobrescrita de ToString()Métodos de ExtensãoRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoSingleton Thread-SafePadrão FactoryPadrão Observer (Eventos)Padrão Strategy2Propriedades e Membros Estáticos
Propriedades AutoimplementadasPropriedades de Apenas Leitura/EscritaCampos e Métodos EstáticosClasses EstáticasMembros com Corpo de Expressão5Polimorfismo e Interfaces
Polimorfismo: Compilação vs ExecuçãoInterface vs Classe AbstrataMúltiplas InterfacesInterfaces ExplícitasUpcasting e DowncastingRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição sobre HerançaGenerics (Classes e Métodos)Delegates e EventosAtributos e ReflectionIDisposable e a Instrução usingFundamentos de Injeção de Dependência11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Arquitetura de Classes
Dados de Instância vs EstáticosPalavras-chave 'readonly' e 'const'Campos de SuporteRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Modificadores de AcessoPropriedades para EncapsulamentoImplementação de Ocultação de DadosPadrões de ImutabilidadeRecapitulação - Registros de Estudantes9Argumentos Variáveis
A Palavra-chave 'params'Parâmetros OpcionaisArgumentos NomeadosSobrecarga de Métodos