Posso dire che mi riferisco a quello. Quando ho iniziato a conoscere OO e C #, anche io non avevo interfacce. Va bene. Dobbiamo solo imbatterci in qualcosa che ti farà apprezzare le comodità delle interfacce.
Vorrei provare due approcci. E scusami per le generalizzazioni.
Prova 1
Di 'che sei un madrelingua inglese. Vai in un altro paese in cui l'inglese non è la lingua madre. Avete bisogno di aiuto. Hai bisogno di qualcuno che ti possa aiutare.
Chiedete: "Ehi, sei nato negli Stati Uniti?" Questa è eredità.
Oppure chiedi: "Ehi, parli inglese"? Questa è interfaccia.
Se ti preoccupi di ciò che fa, puoi fare affidamento sulle interfacce. Se ti interessa ciò che è, fai affidamento sull'eredità.
Va bene fare affidamento sull'eredità. Se hai bisogno di qualcuno che parli inglese, che ami il tè e che ami il calcio, ti conviene servire un inglese. :)
Prova 2
Ok, proviamo un altro esempio.
Utilizzi database diversi e devi implementare classi astratte per lavorare con essi. Passerai la tua classe a una classe dal fornitore DB.
public abstract class SuperDatabaseHelper
{
void Connect (string User, string Password)
}
public abstract class HiperDatabaseHelper
{
void Connect (string Password, string User)
}
Eredità multipla, dici? Prova con il caso sopra. Non puoi. Il compilatore non saprà quale metodo Connect stai tentando di chiamare.
interface ISuperDatabaseHelper
{
void Connect (string User, string Password)
}
interface IHiperDatabaseHelper
{
void Connect (string Password, string User)
}
Ora, c'è qualcosa con cui possiamo lavorare - almeno in C # - dove possiamo implementare esplicitamente le interfacce.
public class MyDatabaseHelper : ISuperDatabaseHelper, IHiperDatabaseHelper
{
IHiperDataBaseHelper.Connect(string Password, string User)
{
//
}
ISuperDataBaseHelper.Connect(string User, string Password)
{
//
}
}
Conclusione
Gli esempi non sono i migliori, ma penso che ottenga il punto.
"Otterrai" interfacce solo quando ne avrai bisogno. Fino a quando penserai che non sono per te.