TOC

This article has been localized into Italian by the community.

Classi:

Classi astratte

Le classi astratte, individuate con la keyword abstract nella definizione di classe, sono tipicamente usate per definire una classe base. Quello che le caratterizza, è che non si può creare un'istanza con esse - se ci provi, riceverai un errore dal compilatore. Invece, devi necessariamente creare una classe derivata, come imparato nel capitolo delle classi derivate, e creare una istanza della classe derivata. Quindi, quando hai bisogno di una classe astratta? La risposta è che dipende da quello che vuoi fare.

Ad essere sincero, potresti fare molto senza aver bisogno delle classi astratte, ma sono perfette per specifici utilizzi, come nei framework, infatti è facile che tu trova molte classi astratte nel .NET framework. Una buona regola da applicare è che il nome effettivamente ha molto senso - le classi astratte sono molto, ma non sempre, utilizzate per descrivere qualcosa di astratto, qualcosa che è più un concetto che una cosa reale.

In questo esempio, creeremo una classe base per gli animali a quattro zampe e poi creeremo una classe Dog, che sarà la classe derivata, come questo:

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 lo confronti con gli esempi del capito che tratta le classi derivate, non noterai una grande differenza. Infatti, la keyword abstract davanti alla definizione di FourLeggedAnimal è la maggiore differenza. Come puoi vedere, noi creiamo una istanza della classe Dog e poi chiamiamo il metodo ereditato Describe() dalla classe FourLeggedAnimal. Adesso invece prova a creare una istanza della classe FourLeggedAnimal.

FourLeggedAnimal someAnimal = new FourLeggedAnimal();

Riceverai questo errore:

Cannot create an instance of the abstract class or interface 'AbstractClasses.FourLeggedAnimal' (Impossibile creare un istanza della classe astratta o dell'interfaccia 'AbstractClasses.FourLeggedAnimal')

Adesso, come puoi vedere, ereditiamo il metodo Describe(), ma non è molto utile nella sua forma originale, per la nostra classe Dog. Riscriviamola con la keyword override:

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

In questo caso, abbiamo fatto un override completo, ma a volte, potresti voler usare il metodo della classe base aggiunto a nuove funzionalità. Questo può essere fatto usando la base keyword, che si riferisce alla classe che abbiamo ereditato.

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; } }

Adesso ovviamente, puoi creare altre classi derivate della classe FourLeggedAnimal - forse un gatto o un leone? Nel prossimo capitolo, faremo un esempio più avanzato e introdurremo i metodi astratti. Continua a leggere.


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!