Guia Prático: Sobrecarga de Métodos no C# para Todos
Domine as Classes Abstratas em C# com Nosso Tutorial
Imagine que você queira criar um molde para vários tipos de produtos🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio., mas não quer que esse molde seja construído diretamente. Em C#, esse molde chama-se classe
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. abstrata. Ela serve como uma “base” para outras classes, obrigando quem herda dela a implementar certos métodos
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência., mas sem permitir que seja instanciada por conta própria.
Classes🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. abstratas são como o rascunho de um arquiteto: um plano geral que define o que deveria estar presente em cada construção - mas que, sozinho, não é uma casa habitável. Neste artigo, vamos explorar como essas classes
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. funcionam, quais as regras (e pegadinhas) e, claro, exemplos práticos para você entender na prática.
Tabela de Conteúdo 🔗
- O que são classes
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. abstratas?
- Regras e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. características principais
- Exemplo prático
📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.: molde de máquina de café
- Quando (e por que) usar classes
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. abstratas
- Conclusão
- 🧩 O que são Classes
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. Abstratas?
- ⚡ Por que usar Classes
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. Abstratas?
- 🛠️ Implementação Prática em C#
- 🔍 Classes Abstratas vs. Interfaces
📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas.
- 🏗️ Cenários
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Reais de Uso
- 🚨 Erros Comuns
🔏 Criptografia Assimétrica: Domine RSA e Troca de Chaves!Descubra como a criptografia assimétrica protege a troca de chaves e garante segurança em sistemas digitais usando RSA, C# e práticas recomendadas. (e Como Evitá-los)
- 💡 Melhores Práticas
📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.
- 🎯 Desafio Prático
O que são classes abstratas?🔗
Uma classe abstrata é uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. que não pode ser instanciada diretamente. Ela serve como um “contrato parcial” para as classes
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. filhas, definindo:
- Alguns atributos
📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. e comportamentos comuns.
- Métodos
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. que podem (ou devem) ser compartilhados pelas classes derivadas
🧬 Herança: Reutilize Código sem Copiar e Colar (como um Jedi)!Aprenda a utilizar herança em C# para criar hierarquias de classes, reaproveitar código e manter projetos organizados de forma simples e escalável..
Quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. dizemos que ela não pode ser instanciada, isso significa que você não pode criar um objeto diretamente dessa classe. Em vez disso, você cria objetos a partir de suas classes
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. filhas (subclasses).
Por que isso é útil? Porque muitas vezes queremos definir um comportamento padrão ou exigir que as classes🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. filhas tenham certo método implementado. A classe abstrata diz “é obrigatório ter esse método, mas eu não vou dizer exatamente como ele funciona”.
Regras e características principais🔗
1. Uso da palavra-chave🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança.
abstract
:
Para transformar uma classe em abstrata, basta adicionar📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos.
abstract
na declaração🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código.:
public abstract class MinhaClasseAbstrata
{
// ...
}
Se a classe for abstrata, você pode (opcionalmente) declarar métodos abstratos. Esses métodos🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. são assinaturas sem corpo, que as classes
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. filhas obrigatoriamente devem implementar. Exemplo:
public abstract void ExibirMensagem();
Note que não há chaves🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança.
{}
aqui (sem corpo!). A implementação vem na classe filha🧬 Herança: Reutilize Código sem Copiar e Colar (como um Jedi)!Aprenda a utilizar herança em C# para criar hierarquias de classes, reaproveitar código e manter projetos organizados de forma simples e escalável..
Uma classe abstrata também pode ter métodos concretos, ou seja, métodos🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. com corpo. Assim, quem herda dessa classe já ganha um método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. funcional “de graça”.
4. Proibido instanciar:
Se você tentar fazer algo como new MinhaClasseAbstrata()
, o compilador não vai deixar.
5. Herança🧬 Herança: Reutilize Código sem Copiar e Colar (como um Jedi)!Aprenda a utilizar herança em C# para criar hierarquias de classes, reaproveitar código e manter projetos organizados de forma simples e escalável. obrigatória para uso:
Para aproveitar a classe abstrata, você precisa criar uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. que herda dela, usando
:
. Exemplo:
public class MinhaClasseConcreta : MinhaClasseAbstrata
{
public override void ExibirMensagem()
{
Console.WriteLine("Implementação da mensagem!");
}
}
Exemplo prático: molde de máquina de café🔗
Pense em uma fábrica de máquinas de café. Todas as máquinas têm algumas características em comum (como um tanque de água e um método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. para iniciar o preparo), mas cada modelo pode ter um funcionamento diferente na hora de “moer grãos” ou “aquecer a água”.
Podemos criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. uma classe
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. abstrata chamada
MaquinaCafeBase
:
public abstract class MaquinaCafeBase
{
// Propriedade concreta
public int CapacidadeAgua { get; set; }
// Método abstrato: cada máquina deve implementar à sua maneira
public abstract void MoerGraos();
// Método concreto: implementado aqui, igual para todas
public void IniciarPreparo()
{
Console.WriteLine("Iniciando preparo do café...");
}
}
Como usar? Vamos supor que temos duas máquinas de café diferentes:
public class MaquinaCafeExpresso : MaquinaCafeBase
{
public override void MoerGraos()
{
Console.WriteLine("Moendo grãos finamente para Expresso.");
}
}
public class MaquinaCafeFiltro : MaquinaCafeBase
{
public override void MoerGraos()
{
Console.WriteLine("Moendo grãos em consistência média para Filtro.");
}
}
Observe no exemplo acima:
- Cada máquina implementa uma forma diferente de
MoerGraos()
. - Ambas utilizam o método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência.
IniciarPreparo()
, herdado da classe base🧬 Herança: Reutilize Código sem Copiar e Colar (como um Jedi)!Aprenda a utilizar herança em C# para criar hierarquias de classes, reaproveitar código e manter projetos organizados de forma simples e escalável., sem precisar reescrever nada.
Quando (e por que) usar classes abstratas🔗
- Quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. há um conceito geral que não faz sentido ser instanciado sozinho: “Máquina genérica de café” não faz sentido por si só; a gente quer tipos específicos de máquinas.
- Quando queremos garantir que certo comportamento ou método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. seja implementado pelas subclasses: Se você tem a certeza de que toda máquina precisa saber moer grãos, mas cada uma o faz de um jeito, faz sentido um método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. abstrato.
- Vantagens:
- Facilita a padronização de código.
- Evita duplicação de métodos
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. genéricos.
- Força a implementação de métodos
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. fundamentais.
- Desvantagens:
- Limita a flexibilidade: você precisa herdar de uma classe abstrata, e não dá para ter heranças
🧬 Herança: Reutilize Código sem Copiar e Colar (como um Jedi)!Aprenda a utilizar herança em C# para criar hierarquias de classes, reaproveitar código e manter projetos organizados de forma simples e escalável. múltiplas de classes em C#.
- Se usada em excesso, pode complicar o design (classes
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. demais tornam o código mais difícil de entender).
- Limita a flexibilidade: você precisa herdar de uma classe abstrata, e não dá para ter heranças
Conclusão🔗
Classes🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. abstratas são como planos de construção que você não pode tangibilizar sozinhos, mas que definem a espinha dorsal de algo maior. Se você quer criar “famílias” de objetos com comportamentos semelhantes - e também quer garantir que determinados métodos
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. sejam sempre implementados - as classes abstratas são a ferramenta certa. Elas permitem centralizar lógica que todas as subclasses vão compartilhar, além de forçar a implementação de comportamentos específicos, mantendo o projeto mais organizado e consistente.
🧩 O que são Classes Abstratas?🔗
- Não podem ser instanciadas diretamente (
new MinhaClasseAbstrata()
❌) - Podem conter:
- Métodos
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. implementados (com lógica real)
- Métodos
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. abstratos (sem implementação, só assinatura)
- Campos, propriedades
⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção., eventos
- Métodos
public abstract class Animal {
public string Nome { get; set; } // Propriedade concreta
public abstract void EmitirSom(); // Método abstrato
public void Dormir() { // Método concreto
Console.WriteLine("Zzzzz...");
}
}
⚡ Por que usar Classes Abstratas?🔗
1. Forçar contratos: "Toda subclasse DEVE implementar X"
2. Compartilhar lógica comum: Evitar repetição🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! de código
3. Modelagem hierárquica clara: Definir relações "é um" específicas
4. Flexibilidade controlada: Mistura de implementações concretas e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. abstratas
Exemplo real: Sistema de pagamento com múltiplos gateways (PayPal, Stripe). Todos devem implementar ProcessarPagamento()
, mas📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. compartilham lógica de registro de transações.
🛠️ Implementação Prática em C#🔗
Vamos criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. um sistema de formas geométricas:
public abstract class FormaGeometrica {
public abstract double CalcularArea();
public void ExibirArea() {
Console.WriteLine($"Área: {CalcularArea()}");
}
}
public class Retangulo : FormaGeometrica {
public double Largura { get; set; }
public double Altura { get; set; }
public override double CalcularArea() {
return Largura * Altura;
}
}
// Uso:
var retangulo = new Retangulo { Largura = 5, Altura = 3 };
retangulo.ExibirArea(); // Área: 15
🔍 Classes Abstratas vs. Interfaces🔗
Característica | Classe Abstrata | Interface |
---|---|---|
Herança múltipla | ❌ Não suporta | ✔️ Suporta |
Implementação métodos | ✔️ Parcial/completa | ❌ Apenas assinaturas |
Campos | ✔️ Pode ter | ❌ Não pode |
Construtores | ✔️ Pode ter | ❌ Não pode |
Modificador de acesso | Qualquer (public, etc) | Apenas public |
Regra prática: Use classe abstrata quando precisar compartilhar código entre classes relacionadas. Use interface📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas. para definir contratos entre classes não relacionadas.
🏗️ Cenários Reais de Uso🔗
1. Frameworks de Pagamento:
public abstract class PaymentGateway {
protected abstract void ProcessPayment(decimal amount);
public void LogTransaction(string details) {
// Lógica comum de logging
File.AppendAllText("transactions.log", $"{DateTime.Now}: {details}");
}
}
2. Sistemas de Log:
public abstract class LoggerBase {
public abstract void Log(string message);
protected string FormatMessage(string message) {
return $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] {message}";
}
}
🚨 Erros Comuns (e Como Evitá-los)🔗
1. Hierarquias muito profundas:
Animal → Mamífero → Felino → GatoDoméstico → GatoPersa ❌
Solução: Mantenha no máximo 3 níveis de herança🧬 Herança: Reutilize Código sem Copiar e Colar (como um Jedi)!Aprenda a utilizar herança em C# para criar hierarquias de classes, reaproveitar código e manter projetos organizados de forma simples e escalável.
2. Misturar responsabilidades:
public abstract class Veiculo {
public abstract void Voar(); // ❌ Não faz sentido para carros
}
Solução: Quebrar em hierarquias separadas (VeiculoTerrestre/VeiculoAereo)
💡 Melhores Práticas🔗
1. Use modificador protected
para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! membros que só fazem sentido nas subclasses
2. Prefira composição sobre herança🧬 Herança: Reutilize Código sem Copiar e Colar (como um Jedi)!Aprenda a utilizar herança em C# para criar hierarquias de classes, reaproveitar código e manter projetos organizados de forma simples e escalável. quando possível
3. Documente métodos abstratos com XML comments📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente.:
/// <summary>
/// Calcula o imposto específico do produto
/// </summary>
public abstract decimal CalcularImposto();
4. Considere classes🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. abstratas seladas (
sealed
) quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. a hierarquia não deve ser estendida
🎯 Desafio Prático🔗
Crie um sistema de veículos com:
- Método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. abstrato
LigarMotor()
- Método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. concreto
Abastecer(double litros)
2. Subclasses Carro
e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.
Moto
implementando comportamentos específicos
3. Classe de teste que demonstra polimorfismo🎭 Polimorfismo: Crie Métodos que se Transformam como um Camaleão!Descubra como o polimorfismo permite métodos versáteis em C#. Veja exemplos práticos e dicas para dominar OOP de forma flexível e robusta.
Dica bônus: Adicione uma propriedade⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. abstrata
TipoCombustivel
que cada subclasse deve implementar!
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- DevBlogs da Microsoft: devblogs.microsoft.com/dotnet/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/