Originariamente inviato da alka
Questo è un ambito in cui conviene utilizzare una classe, inserendo nella classe base tutte le caratteristiche (metodi e attributi) che sono comuni alle classi discendenti, che implementano invece i tipi specifici di prenotazione, aggiungendo nuove caratteristiche (metodi e attributi) che si riferiscono al tipo particolare di prenotazione.
Il perché tu stia pensando ostinatamente ad un'interfaccia, in questo caso, non lo so: la capacità di leggere nel pensiero non l'ho ancora sviluppata.
Sì, ed è proprio per questo motivo che, in questo frangente, non ha senso utilizzarla (così come è posto il problema), visto che stai definendo delle caratteristiche per l'elemento "Prenotazione" del tuo sistema che hanno attributi e metodi che devono essere definiti in qualche modo.
Una classe astratta può anche essere implementata parzialmente, avendo solo alcuni metodi astratti e non tutti.
Supponendo comunque che si stia parlando di una classe astratta in cui non viene implementato alcun metodo, prendendo ancora in esame l'esempio delle "Prenotazioni", non ha senso che io definisca la base di tutte le prenotazioni come interfaccia, visto che non si avrebbe a che fare con una gerarchia di oggetti a cui può essere opzionalmente applicata l'interfaccia "Prenotazione", ma la "Prenotazione" in sé rappresenta un elemento specifico, che ha attributi generici comuni, inseriti nella classe base, dalla quale erediteranno tutte le classi discendenti che rappresentano i tipi specifici di "Prenotazione" con cui si vuol avere a che fare.
In questo caso, ipoteticamente, un'interfaccia potrebbe tornare utile qualora si abbiano, oltre alle "Prenotazioni", altri tipi di oggetti, magari appartenenti a gerarchie diverse, e si volesse definire per questi un metodo specifico, ad esempio un metodo "Annulla", che si possa applicare sia alle prenotazioni ma anche ad altri oggetti di classi diverse, definendo così un'operazione che viene implementata in gerarchie di classi diverse ma che conserva un significato/comportamento analogo, consentendo di effettuare l'operazione di annullamento, ad esempio, su entrambi i tipi di oggetti eterogenei.
Migliaia di altri esempi a riguardo si possono trovare poi anche nella stessa libreria base del .NET Framework, giusto perché è stato citato, dove sono presenti migliaia di classi e interfacce.
Ciao!