TOC

This article has been localized into Portuguese by the community.

Classes:

Classes abstratas

Classes abstratas, marcadas pela palavra-chave abstract na definição de classe, são normalmente usadas para definir uma classe base na hierarquia. O que é especial sobre eles, é que você não pode criar uma instância deles - se você tentar, você receberá um erro de compilação. Em vez disso, você precisa subclassá-los, como ensinado no capítulo sobre herança, e criar uma instância de sua subclasse. Então, quando você precisa de uma aula abstrata? Isso realmente depende do que você faz.

Para ser honesto, você pode percorrer um longo caminho sem precisar de uma classe abstrata, mas eles são ótimos para coisas específicas, como frameworks, e é por isso que você encontrará um pouco de classes abstratas dentro do próprio .NET framework. Uma boa regra é que o nome realmente faz muito sentido - classes abstratas são frequentemente, se não sempre, usadas para descrever algo abstrato, algo que é mais um conceito do que uma coisa real.

Neste exemplo, vamos criar uma classe base para quatro animais legged e, em seguida, criar uma classe Dog, que herda dela, assim:

namespace AbstractClasses
{
    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            Console.WriteLine(dog.Describe());
            Console.ReadKey();
        }
    }

    abstract class FourLeggedAnimal
    {
        public virtual string Describe()
        {
            return "Not much is known about this four legged animal!";
        }
    }

    class Dog : FourLeggedAnimal
    {

    }
}

Se você comparar com os exemplos no capítulo sobre herança, você não verá uma grande diferença. Na verdade, a palavra-chave abstrata na frente da definição FourLeggedAnimal é a maior diferença. Como você pode ver, criamos uma nova instância da classe Dog e depois chamamos o método Describe() herdado da classe FourLeggedAnimal. Agora tente criar uma instância da classe FourLeggedAnimal:

FourLeggedAnimal someAnimal = new FourLeggedAnimal();

Você receberá este erro de compilador bem:

Cannot create an instance of the abstract class or interface 'AbstractClasses.FourLeggedAnimal'

Agora, como você pode ver, nós apenas herdamos o método Describe(), mas não é muito útil em sua forma atual, para nossa classe Dog. Vamos sobrescrevê-lo:

class Dog : FourLeggedAnimal
{
    public override string Describe()
    {
        return "This four legged animal is a Dog!";
    }
}

Nesse caso, fazemos uma substituição completa, mas, em alguns casos, talvez você queira usar o comportamento da classe base além da nova funcionalidade. Isso pode ser feito usando a palavra-chave base, que se refere à classe da qual herdamos:

abstract class FourLeggedAnimal
{
    public virtual string Describe()
    {
        return "This animal has four legs.";
    }
}


class Dog : FourLeggedAnimal
{
    public override string Describe()
    {
        string result = base.Describe();
        result += " In fact, it's a dog!";
        return result;
    }
}

Agora, obviamente, você pode criar outras subclasses da classe FourLeggedAnimal - talvez um gato ou um leão? No próximo capítulo, vamos fazer um exemplo mais avançado e introduzir métodos abstratos também. Leia.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!