Carregando...

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

text
TEXT Code
using 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

text
TEXT Code
using 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

Pronto para Começar

Teste seu Conhecimento

Teste sua compreensão deste tópico com questões práticas.

4
Perguntas
🎯
70%
Para Passar
♾️
Tempo
🔄
Tentativas

📝 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