This article has been localized into Italian by the community.
Altre classi astratte
Nel capitolo precedente, abbiamo dato uno sguardo alle classi astratte. In questo capitolo, espanderemo gli esempi ancora un po', e ci addentreremo nei metodi astratti. I metodi astratti sono permessi solo all'interno delle classi astratte. La loro definizione assomiglia ad un metodo normale, ma non hanno codice al loro interno:
abstract class FourLeggedAnimal
{
public abstract string Describe();
}
Quindi, perché definire un metodo vuoto che non fa nulla? Perché un metodo astratto è un obbligo di implementare quel metodo nelle classi derivate. Infatti, è controllato durante la compilazione del codice, per assicurare che la classe derivata contenga quel metodo. Ancora una volta, questo è un ottimo modo per creare una classe base per qualcosa, mentre rimane un certo controllo di cosa la classe derivata dovrebbe saper fare. Con questo in mente, puoi sempre trattare una classe derivata come la sua classe base, in ogni momento tu abbia bisogno di usare un metodo definito come metodo astratto. Per esempio, consideriamo l'esempio seguente:
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!";
}
}
}
Come puoi vedere, abbiamo creato un ArrayList per contenere i nostri animali. Poi creiamo una istanza dog e una cat e li aggiungiamo alla lista. Questi sono stati istanziati come Dog e Cat, ma loro fanno anche parte del tipo FourLeggedAnimal, e dato che il compilatore conosce che le classi derivate di quella classe contengono il metodo Describe(), hai effettivamente il permesso di richiamare quel metodo, senza sapere l'esatto tipo di animale. Quindi facendo riferimento al tipo FourLeggedAnimal, che è quello che facciamo nel ciclo foreach, possiamo accedere ai membri delle classi derivate. Questo può risultare molto utile in molte situazioni.