c# principianti Quando usare le classi astratte?




windows form c# guida (5)

Ecco l'articolo di MSDN sulle classi astratte , ma io davvero non capisco ...

Quando dovrei davvero usare classi astratte? Quali sono i vantaggi dell'utilizzo di classi astratte?


Richard ha fornito un esempio in cui una classe di abstact ha vantaggi rispetto alle classi non astratte.

Vorrei aggiungere una tabella dei fatti per la scelta tra una classe astratta e un'interfaccia. L'immagine può essere trovata here .


Le classi astratte sono utili quando hai bisogno di una classe ai fini dell'ereditarietà e del polimorfismo, ma non ha senso istanziare la classe stessa, solo le sue sottoclassi. Vengono comunemente utilizzati quando si desidera definire un modello per un gruppo di sottoclassi che condividono un codice di implementazione comune, ma si desidera anche garantire che gli oggetti della superclasse non possano essere creati.

Ad esempio, diciamo che è necessario creare oggetti per cani, gatti, criceti e pesci. Possiedono proprietà simili come colore, taglia e numero di gambe e comportamento, quindi crei una superclasse degli animali. Tuttavia, di che colore è un animale? Quante gambe ha un oggetto Animale? In questo caso, non ha molto senso istanziare un oggetto di tipo Animale ma piuttosto solo le sue sottoclassi.

Le classi astratte hanno anche il vantaggio aggiuntivo nel polimorfismo, consentendo di utilizzare il tipo di superclasse (astratto) come argomento del metodo o come tipo di ritorno. Se per esempio hai una classe PetOwner con un metodo train () puoi definirla come un oggetto di tipo Animale, ad esempio il treno (Animale a), invece di creare un metodo per ogni sottotipo di Animale.


Li usi per le classi che non saranno mai create (quindi non esistono effettivamente), ma tu vuoi ereditarle per motivi di polimorfismo.


Fondamentalmente, dovresti usare una classe astratta, quando qualche entità nella tua gerarchia avrà logicamente dei metodi che non sa come implementare, ma i suoi discendenti lo fanno. Ci sono miliardi di esempi di "vita reale" in tutto il web, davvero)


Utilizza le classi astratte quando definisci il comportamento di una classe nella tua gerarchia di classe che non verrà mai utilizzata per istanziare direttamente un oggetto.

Quindi, pensa a te stesso come Dio per un momento. Le tue classi CBabyBoy e CBanyGirl non sarebbero astratte, poiché sono oggetti solidi che vengono creati. D'altra parte, le classi CPerson e CAnimal SAREBBERO essere astratte: sono utili da un punto di vista della gerarchia di tipi, ma non si eseguirà mai CAnimal dingbat = new Animal();





abstract-class