This article has been localized into Portuguese by the community.
Herança
Um dos aspectos-chave absolutos da Programação Orientada a Objetos (OOP), que é o conceito sobre o qual o C# é construído, é a herança, a capacidade de criar classes que herdam certos aspectos das classes-pai. O framework .NET inteiro é construído sobre este conceito, com o "tudo é um objeto" como resultado dele. Mesmo um número simples é uma instância de uma classe, que herda da classe System.Object, embora o .NET ajude você um pouco, para que você possa atribuir um número diretamente, em vez de precisar criar uma nova instância, por exemplo, a classe inteira.
Este assunto pode ser um pouco difícil de compreender, mas às vezes ajuda com alguns exemplos, então vamos começar com um simples desses:
public class Animal
{
public void Greet()
{
Console.WriteLine("Hello, I'm some sort of animal!");
}
}
public class Dog : Animal
{
}
Primeiro, definimos uma classe Animal, com um método simples para gerar uma saudação. Em seguida, definimos uma classe Dog e, com dois pontos, informamos ao C# que a classe Dog deve herdar da classe Animal. A coisa bonita sobre isso é que faz sentido no mundo real também - um cão é, obviamente, um animal. Vamos tentar usar as classes:
Animal animal = new Animal();
animal.Greet();
Dog dog = new Dog();
dog.Greet();
Se você executar este exemplo, você notará que, embora não tenhamos definido um método Greet() para a classe Dog, ele ainda sabe como nos cumprimentar, porque ele herda esse método da classe Animal. No entanto, esta saudação é um pouco anônima, então vamos personalizá-la quando soubermos qual animal ela é:
public class Animal
{
public virtual void Greet()
{
Console.WriteLine("Hello, I'm some sort of animal!");
}
}
public class Dog : Animal
{
public override void Greet()
{
Console.WriteLine("Hello, I'm a dog!");
}
}
Além do método adicionado na classe Dog, você deve observar duas coisas: Eu adicionei a palavra-chave virtual ao método na classe Animal e, na classe Dog, uso a palavra-chave override.
Em C#, você não tem permissão para substituir um membro de uma classe a menos que esteja marcado como virtual. Se você quiser, ainda pode acessar o método herdado, mesmo quando você o sobrescreve, usando a palavra-chave base.
public override void Greet()
{
base.Greet();
Console.WriteLine("Yes I am - a dog!");
}
Métodos não é a única coisa a ser herdada, no entanto. Na verdade, praticamente todos os membros da classe serão herdados, incluindo campos e propriedades. Apenas lembre-se das regras de visibilidade, como discutido em um capítulo anterior.
Herança não é apenas de uma classe para outra - você pode ter uma hierarquia inteira de classes, que herda uma da outra. Por exemplo, podemos criar uma classe Puppy, que herda da nossa classe Dog, que por sua vez herda da classe Animal. O que você não pode fazer em C# é deixar uma classe herdar de várias outras classes ao mesmo tempo. Herança múltipla, como é chamada, não é suportada pelo C#.