Newsgroup: it.comp.lang.visual-basic
Titolo: Interfaccie multiple: mi sto perdendo

Ok, mi arrendo, dall'msdn sembrerebbe che sia
possibile fare una cosa del tipo:
Class IBase
Public Name as string
Calls IAdvanced
Implemens IBase
public IBase_Name as string
Public Cognome as string
Form1
Dim x as IAdvanced
x.cognome
x.nome
All'atto pratico, invece, non è così. Ho commesso qualche
errore, però non capisco come. Se si parla di interfaccie
multiple ... mi aspetto che fatta la base (così come ogni altra
interfaccia - proprio perchè non devono più essere toccate)
posso espandere ed avere sempre tutto il set di proprietà, metodi
variabili.
Dove sbaglio?
Andrea 

 x.nome
non è che stai facendo qualche piccola confusione tra implements e
inherits?
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

se fosse .net ti direi di si, ma sfortunatamente vb6 offre l'ereditarietà
esclusivamente tramite l'implementazione di interfacce.
ciao
Andrea

 ha
scritto:

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 quantità di magliette sudate...
In effetti le interfaccie si implementano, non si ereditano.
Anche perchè non contengono codice :) quindi, che erediti?
Ciao
--
Qualunque mentecatto può scrivere codice che un computer possa capire.
I buoni programmatori scrivono codice che gli uomini possano capire.
[Martin Fowler]

 Andrea 
Andrea

Si, ma non fa quello che speravo ... ovvero la variabile "più
grande" che contiene anche quella più piccola per assurdo
se io ho A e B, B implementa A ... io da B vorrei vedere
B e A ... come un unico oggetto, invece l'unico modo che
ho è creare un metodo pubblico che sia di tipo A o alternativamente
una proprietà che restituisca un nuovo oggetto di tipo A.
Insomma na porcheria.
Andrea 

Chiedo venia. Sbagliato parolina :)
Ciao
Andrea 

 Insomma na porcheria.
Bravo, l'hai capito :)
VB6 per queste cose è proprio ridicolo e non fa bene nemmeno quel poco che
dichiara di fare.
Infatti normalmente se B implementa A dovrei avere tutti i metodi, sia di B
che di A, ovviamente anche questi ultimi ri-implementati.
In pratica in VB6 sei costretto a fare qualcosa come:
Dim MyVarA As IMyInterface
Dim MyVarB As MyClass
Set MyVarB = New MyClass 'Qui vedo i metodi di B
Set MyVarA = MyVarB ' Qui vedo i metodi di A
Entrambe le variabili lavorano sullo stesso oggetto però sei costretto ad
averne due a seconda dei casi.
Scomodo ma sicuramente molto più pulito delle soluzioni che indicavi sui
sopra.
Rassegnati, l'ereditarietà non è supportata e basta :)


 sopra.
Vero ... ma quello che tu mostri così è semplicemente l'utilizzo di
una classe che usa l'interfaccia. Perchè se comunque devi utilizzare
un metodo tipico di myclass, devi comunque far riferimetno a myvarb e
non a myvara, quindi effettivamente non è fattibile.
La domanda a questo punto mi sorge spontanea. Al di là di avere
una sorta di firma che tutte le classi devono implementare per essere
sicuri che tutti gli oggetti siano uguali ... ma che diavolo ci faccio con
ste implementazioni?
Cioè ... per ragionare terra terra ... se io ho 10 form e in tutte e 10 
proprio
perchè sono accorto ci metto gli stessi metodi e proprietà ... perchè
andarmi devo farmi dei trip con le interfaccie?
Ciao
Andrea

 Andrea
Andrea

 ste implementazioni?
Tu continui a confondere l'uso delle interfacce con l'ereditarietà.
Sono due cose diverse, la seconda non è fattibile in VB6, la prima funziona
solo a metà.
Rassegnati :)
Per il tuo giochino puoi sfruttare a tuo vantaggio il buco di VB6:
implementi le azioni comuni sulla classe di interfaccia (nota che un
linguaggio "normale" non te lo farebbe fare).
Nelle classi che l'implementano (che non sono "derivate" perchè non derivano
da un bel niente) sei costretto a implementare il metodo, ma puoi lasciarlo
vuoto oppure implementarlo diversamente solo se per la classe deve essere
differente.
Poi continui a chiamare MyClassA.MetodoBase per qualsiasi classe che
implementa IMyInterface.
Ciao

 linguaggio "normale" non te lo farebbe fare).
Cosa indendi con "in linguaggio "normale" non te lo farebbe fare"?
In linguaggi che non hanno una keyword "Interface", e che io sappia solo
Java (non so se ce l'hanno anche 
VB.NET
 e C#) ce l'ha, è normale fare
quello che il VB fa fare...
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

 quello che il VB fa fare...
Sì, sia VB.net che C# hanno la parola chiave interface.
.Net gestisce l'interfaccia multipla e l'ereditarietà singola.
Sto imparando con .Net l'uso dell'ereditarietà ed in effetti ora quando uso
VB6 mi sento castrato: a saperla usare è di una comodità che se non la provi
non ci credi.


 non ci credi.
Sì, ereditarietà è in effetti utilissima, ma trovo che certi linguaggi
(Java per primo, ma anche 
VB.NET
 e C#) spingano verso il suo abuso...
L'ereditarietà non serve a riutilizzare codice, ma ad essere
riutilizzati dal codice...
