In C# non esiste l'ereditarietà multipla (e forse è meglio così, secondo me).

Gestire un'ereditarietà multipla non è così facile come credi.

Inoltre, i casi in cui un'ereditarietà multipla è davvero necessaria o indispensabile sono pochissimi.

Spesso, basta utilizzare le interfacce per ottenere l'effetto desiderato, oppure è possibile agire per composizione, cioè creando all'interno della propria classe "B" che discende da una classe "A" un'istanza della classe "C" per usarne le funzionalità, senza però fornire la sua interfaccia all'esterno.

Agire per composizione è molto semplice e immediato, mentre l'uso delle interfacce è un po' più complesso, ma non di tanto.

Sostanzialmente, si tratta di creare classi puramente astratte, che contengono metodi (non implementati); tali classi, dette interfacce (come indica la parola chiave interface) fungono semplicemente da "scheletro" per le classi che le implementano.

Concludendo, puoi dichiarare un'interfaccia che contenga i metodi necessari a svolgere una determinata funzionalità e creare classi discendenti partendo da una qualsiasi classe base che implementino tale interfaccia.

Il vantaggio più grande è il seguente: ovunque sia richiesto il riferimento ad un'interfaccia, è possibile passare un'istanza di qualsiasi classe che, indipendentemente dalla classe base da cui deriva, implementi tale interfaccia.

Il Data Binding è stato implementato in questo modo: un'interfaccia definisce i metodi di cui dispone (leggi "deve disporre obbligatoriamente") qualsiasi classe che intendde supportare tale meccanismo di associazione ad un'origine dati.

Spero di averti dato indicazioni utili.

Prima di addentrarti nella creazione di interfacce, documentati bene a riguardo poichè la loro trattazione non si può esaurire in un semplice messaggio su questo forum.

Ciao!