Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Dominando Herança em C#: Conceitos, Tipos e Código Prático

Herança em C# Explicada

Este guia cobre os fundamentos da herança em C#, suas várias formas e exemplos práticos de código.

Herança em C# permite criar uma nova classe que deriva de uma existente, formando uma relação pai (base) e filho (derivada). Este poderoso recurso da Programação Orientada a Objetos (POO) promove reutilização de código e organização lógica.

A classe base fornece campos, propriedades e métodos que a classe derivada herda, permitindo que o filho estenda ou personalize comportamento enquanto mantém lógica compartilhada em um só lugar.


Como Declarar Herança em C#

Em C#, os dois pontos (:) indicam herança:

class Animal { // campos e métodos } // Cachorro herda de Animal class Cachorro : Animal { // campos e métodos de Animal // campos e métodos de Cachorro }

Aqui, Cachorro estende Animal, ganhando acesso a seus membros. O diagrama abaixo ilustra a relação.

Dominando Herança em C#: Conceitos, Tipos e Código Prático

Exemplo: Herança Básica

using System; namespace Heranca { // Classe base class Animal { public string nome; public void Exibir() { Console.WriteLine("Sou um animal"); } } // Classe derivada class Cachorro : Animal { public void ObterNome() { Console.WriteLine("Meu nome é " + nome); } } class Program { static void Main(string[] args) { Cachorro labrador = new Cachorro(); labrador.nome = "Rohu"; labrador.Exibir(); labrador.ObterNome(); Console.ReadLine(); } } } 

Saída

Sou um animal Meu nome é Rohu

Neste exemplo, Cachorro herda o campo nome e o método Exibir() de Animal. A classe derivada também pode adicionar seus próprios membros, como ObterNome().


A Relação "é-um"

Herança representa uma relação "é-um". Use-a quando uma classe logicamente é uma forma especializada de outra.

Essas relações justificam derivar Cachorro de Animal, Maçã de Fruta e Carro de Veículo.


Membros Protected na Herança

Quando um campo ou método é declarado protected, ele é acessível dentro de sua própria classe e todas as classes derivadas, mas oculto de código externo.

Exemplo: Usando Métodos Protected

using System; namespace Heranca { class Animal { protected void Comer() { Console.WriteLine("Posso comer"); } } class Cachorro : Animal { static void Main(string[] args) { Cachorro labrador = new Cachorro(); labrador.Comer(); Console.ReadLine(); } } } 

Saída

Posso comer

Como Comer() é protected, a classe Cachorro pode invocá-lo, mas código fora da hierarquia não pode.


Tipos de Herança

Herança se manifesta em vários padrões:

1. Herança Simples

Uma única classe derivada herda de uma classe base.

Dominando Herança em C#: Conceitos, Tipos e Código Prático

2. Herança Multinível

Uma cadeia de herança onde uma classe herda de uma base, então outra classe herda dessa classe derivada.

Dominando Herança em C#: Conceitos, Tipos e Código Prático

3. Herança Hierárquica

Múltiplas classes derivadas compartilham a mesma classe base.

Dominando Herança em C#: Conceitos, Tipos e Código Prático

4. Herança Múltipla

Embora C# não suporte herdar de múltiplas classes, interfaces fornecem uma alternativa flexível para alcançar comportamento similar.

Dominando Herança em C#: Conceitos, Tipos e Código Prático

5. Herança Híbrida

Uma combinação de dois ou mais tipos de herança, como multinível mais hierárquica.

Dominando Herança em C#: Conceitos, Tipos e Código Prático

Sobrescrita de Métodos (Method Overriding)

Quando uma classe derivada declara um método com a mesma assinatura de um método da classe base marcado virtual, o método derivado pode sobrescrevê-lo usando override. Isso permite comportamento polimórfico.

using System; namespace Heranca { class Animal { public virtual void Comer() { Console.WriteLine("Como comida"); } } class Cachorro : Animal { public override void Comer() { Console.WriteLine("Como ração"); } } class Program { static void Main(string[] args) { Cachorro labrador = new Cachorro(); labrador.Comer(); } } } 

Saída

Como ração

O método Comer() em Cachorro sobrescreve o de Animal. A palavra-chave virtual permite a sobrescrita, enquanto override sinaliza a substituição.


Usando a Palavra-chave base

Às vezes você precisa invocar a implementação da classe base de um método sobrescrito. A palavra-chave base facilita isso.

Exemplo: Chamando Métodos da Base

using System; namespace Heranca { class Animal { public virtual void Comer() { Console.WriteLine("Animais comem comida."); } } class Cachorro : Animal { public override void Comer() { base.Comer(); Console.WriteLine("Cachorros comem ração."); } } class Program { static void Main(string[] args) { Cachorro labrador = new Cachorro(); labrador.Comer(); } } } 

Saída

Animais comem comida. Cachorros comem ração.

Aqui, base.Comer() chama a implementação de Animal antes de executar a lógica da classe derivada.


Por que Herança Importa em C#

Herança permite lógica reutilizável entre classes relacionadas. Considere formas geométricas onde cálculos de perímetro compartilham uma fórmula comum.

  1. Crie uma classe base PoligonoRegular com método CalcularPerimetro().
  2. Derive Quadrado e Retangulo dela, adicionando propriedades específicas como Comprimento e Lados.
  3. Cada classe derivada também pode implementar seu próprio cálculo de área enquanto reutiliza a lógica de perímetro.

Exemplo Ilustrativo

using System; namespace Heranca { class PoligonoRegular { public void CalcularPerimetro(int comprimento, int lados) { int resultado = comprimento * lados; Console.WriteLine("Perímetro: " + resultado); } } class Quadrado : PoligonoRegular { public int Comprimento = 200; public int Lados = 4; public void CalcularArea() { int area = Comprimento * Comprimento; Console.WriteLine("Área do Quadrado: " + area); } } class Retangulo : PoligonoRegular { public int Comprimento = 100; public int Largura = 200; public int Lados = 4; public void CalcularArea() { int area = Comprimento * Largura; Console.WriteLine("Área do Retângulo: " + area); } } class Program { static void Main(string[] args) { Quadrado q1 = new Quadrado(); q1.CalcularArea(); q1.CalcularPerimetro(q1.Comprimento, q1.Lados); Retangulo r1 = new Retangulo(); r1.CalcularArea(); r1.CalcularPerimetro(r1.Comprimento, r1.Lados); } } } 

Saída

Área do Quadrado: 40000 Perímetro: 800 Área do Retângulo: 20000 Perímetro: 400

Este padrão ilustra como herança reduz duplicação e melhora manutenibilidade.

Linguagem C

  1. Classes e Objetos em C#: Fundamentos para POO Robusta
  2. Entendendo Modificadores de Acesso em C#: Public, Private, Protected, Internal e Mais
  3. Palavra-chave Static em C#: Dominando Variáveis, Métodos e Classes Estáticas
  4. Dominando Classes e Métodos Abstratos em C#: Guia Prático
  5. Entendendo Classes Aninhadas em C#: Definição, Uso e Herança
  6. Entendendo Classes e Métodos Parciais em C#
  7. Dominando Classes e Métodos Sealed em C#: Quando Usar, Exemplos Claros e Segurança de Código
  8. Entendendo Polimorfismo em C++: Guia Prático
  9. Dominando Abstração de Dados em C++: Simplifique Design com Separação Interface-Implementação
  10. Entendendo a Estrutura de Programas C#: Componentes Essenciais e Exemplo