TOC

This article has been localized into Spanish by the community.

Clases:

Mas clases abstractas

En el capítulo anterior, hemos visto clases abstractas. En este capítulo, ampliaremos un poco los ejemplos y también veremos algunos métodos abstractos. Los métodos abstractos solo están permitidos dentro de clases abstractas. Su definición es similar a la de un método normal, pero no tienen código dentro de ellos:

abstract class FourLeggedAnimal
{
    public abstract string Describe();
}

Entonces, ¿por qué querrías definir un método vacío que no hace nada? Porque un método abstracto obliga a implementar ese método en todas las subclases. De hecho, es verificado en tiempo de compilación, para asegurar que tus subclases tengan definido este método. Una vez mas, esta es una gran forma de crear una clase base para algo, y mantener un cierto control de lo que las subclases deberían poder hacer. Con esto en mente, siempre puedes tratar una subclase como su clase base, siempre que necesites usar métodos definidos como métodos abstractos en la clase base. Por ejemplo, considera el siguiente código:

namespace AbstractClasses
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Collections.ArrayList animalList = new System.Collections.ArrayList();
            animalList.Add(new Dog());
            animalList.Add(new Cat());
            foreach(FourLeggedAnimal animal in animalList)
                Console.WriteLine(animal.Describe());
            Console.ReadKey();
        }
    }

    abstract class FourLeggedAnimal
    {
        public abstract string Describe();
    }


    class Dog : FourLeggedAnimal
    {

        public override string Describe()
        {
            return "I'm a dog!";
        }
    }

    class Cat : FourLeggedAnimal
    {
        public override string Describe()
        {
            return "I'm a cat!";
        }
    }
}

Como puedes ver, creamos un ArrayList para contener nuestros animales. Luego instanciamos un nuevo perro y un nuevo gato y los agregamos a la lista. Se instanciaron como Dog y Cat respectivamente, pero también son del tipo FourLeggedAnimal, y ya que el compilador sabe que las subclases de esa clase contienen el método Describe(), puedes ejecutar ese método, sin saber el tipo exacto de animal. Entonces por conversion de tipo (typecasting) al tipo FourLeggedAnimal, que es lo que hacemos en el bucle foreach, obtenemos acceso a los miembros de las subclases. Esto puede ser muy útil en muchos escenarios.


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!