Newsgroup: it.comp.dotnet
Titolo: Unire piu' classi

Ciao,
----------------------------------------------
Visual Basic Express 2008
S.O.: Win XP
----------------------------------------------
una domanda molto banale sulle classi. Come posso creare una classe
che contenga tutte le proprieta' di 4 classi diverse?
Es:
- Classe A contiene 5 proprieta'
- Classe B contiene 4 proprieta'
- Classe C contiene 3 proprieta'
- Classe D contiene 3 proprieta'
io vorrei avere una classe E che in qualche modo possa contenerle
tutte e 15 (senza doverla creare ad hoc).
Grazie mille
Ciao Blacksun


Ereditarietà?
class E : A, B, C, D
Al3x

Ciao,
che io sappia VB nn supporta la multi ereditarieta'. Ogni classe puo'
avere solo una classe padre.
O sbaglio?
Ciao BlackSun


 O sbaglio?
Non sbagli mi sono confuso io (lavoro più che altro con C# dove NON è
supportata e ricordavo che VB la supportasse ma mi confondevo con C+
+!).
Direi che l'unica maniera è quella di implementare un po' di
interfacce...
http://msdn.microsoft.com/it-it/library/28e2e18x(v=VS.90).aspx
Una cosa del tipo (se la sinstassi qui sotto è mista VB / C#
perdonami :-) )
interface iA
{
 prop 1;
 prop 2;
}
interface iB
{
 prop 3;
prop 4;
}
...
class A : iA
class B : iB
...
classe E : iA, iB, iC, ...
Che dici: può funzionare?
Al3x

 che contenga tutte le proprieta' di 4 classi diverse?
Come già detto non è disponibile l'ereditarietà multipla di classi. O
erediti multiple interfacce, oppure aggreghi nella classe "E" le
altre, cioé esponi classi A, B, C, D come proprietà della classe E.
mt

 tutte e 15 (senza doverla creare ad hoc).
Non è buona norma ereditare solo perchè si vuole avere una 
"funzionalità" che esiste in un'altra classe (ossia, banalmente, si 
vuole scrivere meno codice): se erediti la classe ereditata deve essere 
un sottotipo altrimenti non erediti, perchè la tua astrazione sarebbe 
difficilmente uniforme (e mi sembrerebbe strano che una classe sia 
contemporaneamente un sottotipo di 5 altre classi).
Questo in generale, nel particolare .Net non supporta l'ereditarietà 
multipla.
Se il tuo problema è quello di scrivere meno codice perchè sei pigro 
(... come tutti ;-) ), la soluzione della delega (che ti hanno già 
proposto) è quella migliore.
Se invece, il tuo è un vero problema di astrazione e quello che insegui 
è un comportamento polimorfico, allora la soluzione delle interfacce 
(già suggerita anche questa) è quella migliore.
Ciao.

 (già suggerita anche questa) è quella migliore.
Come ti dicevo il problema e' solo quello... evitare dimenticanze nel
caso ad una classe aggiunga una proprieta'.
Bah... ci faccio una pensata... valuto anche (se me lo passano)
l'eventualita' di cambiare l'acquisizione dei dati.
Grazie :-)
Ciao BlackSun

 visto che le 4 classi non hanno nulla in comune se non un indice.
Probabilmente c'è da chiedersi prima se veramente ha senso, dal punto 
di vista di modellazione, avere 5 classi di cui una che comprenda le 
proprietà di tutte le altre 4.
Non lo sto escludendo a priori, nè sto criticando, dico solo che 
meriterebbe un'analisi più approfondita.
Se l'analisi rivela che è necessario, puoi sempre avvalerti di 
generatori di codice (T4 template tanto per dire una possibilità) che 
ti eviti l'onere della manutenzione.
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET - 
http://www.ugidotnet.org/

 ti eviti l'onere della manutenzione.
T4 template? Vado a vederlo....
Grazie.
Ciao BlackSun