Herança
Herança em C# é um dos pilares fundamentais da programação orientada a objetos (OOP), permitindo que uma classe herde atributos e métodos de outra classe. Isso promove reutilização de código, organização lógica e modularidade em sistemas complexos. A classe que fornece funcionalidades é chamada de classe base (Base Class), enquanto a classe que herda é conhecida como classe derivada (Derived Class). Herança modela a relação “is-a”, como por exemplo, um Carro (Car) é um tipo de Veículo (Vehicle).
No desenvolvimento em C#, a herança é utilizada para criar hierarquias de classes, implementar polimorfismo e centralizar comportamentos comuns. Conceitos essenciais incluem virtual, override, abstract e sealed, que permitem controlar como métodos e propriedades são herdados ou sobrescritos.
Neste tutorial, você aprenderá a criar classes base e derivadas, sobrescrever métodos, aplicar polimorfismo e estruturar sistemas complexos de maneira eficiente. Além disso, abordaremos boas práticas, otimização de performance e prevenção de erros comuns, garantindo aplicações seguras e fáceis de manter. A compreensão profunda da herança é vital para arquiteturas escaláveis, integração de componentes e desenvolvimento de soluções de software robustas em C#.
Exemplo Básico
textusing System;
// Classe base
class Vehicle
{
public string Brand { get; set; }
public int Year { get; set; }
public virtual void DisplayInfo()
{
Console.WriteLine($"Vehicle: {Brand}, Year: {Year}");
}
}
// Classe derivada
class Car : Vehicle
{
public int Doors { get; set; }
public override void DisplayInfo()
{
Console.WriteLine($"Car: {Brand}, Year: {Year}, Doors: {Doors}");
}
}
class Program
{
static void Main(string\[] args)
{
Vehicle vehicle = new Vehicle { Brand = "Toyota", Year = 2020 };
vehicle.DisplayInfo();
Car car = new Car { Brand = "Honda", Year = 2021, Doors = 4 };
car.DisplayInfo();
}
}
No exemplo acima, Vehicle é a classe base com propriedades Brand e Year e um método virtual DisplayInfo(). A palavra-chave virtual permite que métodos sejam sobrescritos em classes derivadas.
Car herda de Vehicle, adicionando a propriedade Doors. O método DisplayInfo() é sobrescrito usando override para fornecer informações específicas do carro. Esse padrão demonstra como herança permite reutilização de código, extensão de funcionalidades e implementação de polimorfismo. Em projetos reais, essa abordagem é útil para hierarquias de objetos e sistemas que exigem comportamento diferenciado para tipos específicos.
Exemplo Prático
textusing System;
using System.Collections.Generic;
// Classe base: Product
class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public virtual void Display()
{
Console.WriteLine($"Product: {Name}, Price: {Price:C}");
}
}
// Classe derivada: Electronics
class Electronics : Product
{
public int WarrantyMonths { get; set; }
public override void Display()
{
Console.WriteLine($"Electronics: {Name}, Price: {Price:C}, Warranty: {WarrantyMonths} months");
}
}
// Classe derivada: Food
class Food : Product
{
public DateTime ExpiryDate { get; set; }
public override void Display()
{
Console.WriteLine($"Food: {Name}, Price: {Price:C}, Expiry: {ExpiryDate:yyyy/MM/dd}");
}
}
class Store
{
private List<Product> products = new List<Product>();
public void AddProduct(Product product)
{
products.Add(product);
}
public void ShowProducts()
{
foreach (var product in products)
{
product.Display();
}
}
}
class Program
{
static void Main(string\[] args)
{
Store store = new Store();
store.AddProduct(new Electronics { Name = "Smartphone", Price = 1500m, WarrantyMonths = 24 });
store.AddProduct(new Food { Name = "Milk", Price = 5.5m, ExpiryDate = DateTime.Now\.AddMonths(1) });
store.ShowProducts();
}
}
Aqui, Product é a classe base com propriedades Name e Price e método virtual Display(). Electronics e Food herdam de Product, adicionando propriedades específicas e sobrescrevendo Display() para exibir informações customizadas.
A classe Store gerencia uma coleção de produtos. O polimorfismo permite que referências da classe base invoquem métodos sobrescritos nas classes derivadas. Esse padrão é amplamente utilizado em sistemas de inventário, e-commerce e qualquer aplicação que manipule coleções de objetos distintos de forma uniforme, mantendo o código organizado, extensível e fácil de manter.
Boas práticas e armadilhas comuns:
- Defina propriedades e métodos compartilhados na classe base, usando virtual ou abstract adequadamente.
- Evite hierarquias profundas que compliquem manutenção.
- Gerencie recursos e memória para prevenir vazamentos.
- Use tratamento de exceções apropriado.
- Considere interfaces ou composição para flexibilidade em casos complexos.
- Encapsule dados sensíveis e aplique segurança.
📊 Tabela de Referência
C# Element/Concept | Description | Usage Example |
---|---|---|
Class | Definição de classe base ou derivada | class Vehicle { public string Brand; } |
Inheritance | Criação de hierarquia de classes | class Car : Vehicle { public int Doors; } |
Virtual Method | Método que pode ser sobrescrito | public virtual void Display() { } |
Override | Sobrescrevendo método da classe base | public override void Display() { } |
Polymorphism | Chamando método apropriado da classe derivada via referência da base | Vehicle v = new Car(); v.Display(); |
Aprender herança permite definir comportamentos comuns na classe base, sobrescrevê-los ou estendê-los nas classes derivadas e aplicar polimorfismo para gerenciar objetos de maneira uniforme. Essa prática aumenta a modularidade, manutenção e escalabilidade do sistema.
Como próximos passos, estudar abstract classes, interfaces e design patterns é recomendado. Combinar herança com composição oferece arquiteturas robustas e performáticas. Recursos úteis incluem documentação Microsoft, tutoriais avançados e projetos open-source em C#.
🧠 Teste Seu Conhecimento
Teste seu Conhecimento
Teste sua compreensão deste tópico com questões práticas.
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo