Newsgroup: it.comp.lang.visual-basic
Titolo: [Net] Visibilità variabili tra classi

Ciao.
Se in un progetto ho due classi, Class1 e Class2 come posso dichiarare una
variabile in Class1 in modo che venga vista anche da Class2, ma che non sia
pubblica quindi che non sia visibile quando creo un oggetto da Class1?
Ho provato cosě:
Public Class Class1
    Friend x As String
End Class
Public Class Class2
    x="Ciao"
End Class
Ma mi evidenzia un errore sull'assegnamento in Class2 dicendo "Prevista
dichiarazione"
Ovviamente se dichiaro
Pubic x As String
vedo la x anche in Class2, ma la vedo anche quando creo un oggetto di tipo
Class1, cosa che io vorrei evitare.
Grazie a tutti.
Ciao
-- 
Skysurfer

 End Class
prova a dire che class2 eredita da class1, e dimmi come va.
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 prova a dire che class2 eredita da class1, e dimmi come va.
Ma Class2 non eredita da Class1.
In realtà nell'esempio c'è un Public di troppo. Class2 non è pubblica quindi
l'esempio corretto è questo:
Public Class Class1
    Friend x As String
End Class
Class Class2
    x="Ciao"
End Class
Grazie... ciao
-- 
Skysurfer

 Ma Class2 non eredita da Class1.
appunto.
come fa x ad essere "conosciuta" da class2 se la stessa class2 non ha alcun
rapporto con class1?
in realtą la parola chiave che fa questo servizio č "protected", comunque,
per ulteriori dettagli puoi guardare qui:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/methodscope.asp


 End Class
Certo che una cosa così non verrà mai compilata da nessuno :)
Fai un'assegnazione all'esterno di una sub/property/function?
e "x" dove sarebbe dichiarata?
Se x è friend in Class1 è visibile all'interno del progetto, ma se 
dall'esterno fai un'istanza di Class1 x non sarà esposta.
Ciao


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/methodscope.asp
Grazie, adesso do un'occhiata.
Ciao
-- 
Skysurfer

 dall'esterno fai un'istanza di Class1 x non sarà esposta.
E se nel progetto ci sono due classi, come nel mio caso, secondo te x è
visibile in entrambe le classi?
Era quello che mi aspettavo io, ma non è così.
Grazie, ciao
-- 
Skysurfer


wrote:

Francamente non capisco ... se hai un membro all'interno di Class1,
perchč non dovrebbe essere visibile a quella stessa classe a cui il
membro appartiene?
Spiega meglio dove vuoi arrivare.
Ciao!

 Ciao!
Io voglio che la variabile sia visibile sia in Class1 che in Class2.
Non mi sembra cosě strano creare una classe pubblica che utilizza per il suo
funzionamento delle altre classi private.
Ovviamente alcuni membri della classe pubblica devono essere visibili
all'esterno, ma voglio che ci siano anche delle variabili condivise tra
tutte le classi ma non visibili all'esterno.
Questo č quello che vorrei.
Ciao
-- 
Skysurfer

Questo č quello che vorrei.
Vedi se questo esempio č utile per risolvere la questione :
Friend Class Classe2
    Sub Test()
        Dim c1 As New Classe1
        c1.x = 10
 
	Dim l As Long = c1.x
	System.Console.WriteLine(l)
    End Sub
End Class
Public Class Classe1
    Friend x As Long
 
    Shared Sub Main()
        Dim c2 As New Classe2
	c2.Test()
    End Sub
End Class
Ciao!

 tutte le classi ma non visibili all'esterno.
Aaaahh! :)
Adesso ho capito! (credo)
Tu vuoi usare una classe come se fosse un modulo con membri pubblici.
Il fatto che stai abbandonando i moduli pubblici già depone a tuo 
favore, perchè ancora 
vb.net
 fa i salti mortali per tenere la 
compatibilità con le vecchie versioni.
Quello che ti serve è questo, come dicevo nell'altro post:
Public Class Class1
	Shared Friend x As String 'hai messo i vari Option
		                  'a inizio modulo, vero?
End Class
Il Friend serve per nascondere X all'esterno del progetto, ma Class1 è 
ancora visibile!
Altrimenti devi dichiarare la classe come Friend (e quindi puoi evitare 
di dichiarare Friend il membro).
Public Class Class2
	Public Sub Ciao
		Class1.x = "Ciao"
	End Sub
End class
Le variabili non puoi più vederle come x, ma devi usare Classe.x (in 
questo caso perchè Shared) oppure Instanza.x (se x non è Shared).
Quando tu usi un modulo VB compila il modulo come una classe con tutti i 
membri Shared, quindi tanto vale essere chiari già dall'inizio e seguire 
le direttive di .NET e farlo già noi.
Un consiglio: dai un occhio ai modificatori d'accesso di membri e classi 
(es. Shared, Friend, Protected...)
Ciao


Grazie ad entrambi per le risposte.
Adesso devo uscire...appena rientro provo e vi faccio sapere.
Ciao.
-- 
Skysurfer