Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Classi e metodi: prime armi.

Ho iniziato oggi a studiare le classi e devo dire che lo trovo un argomento
veramente interessante.
Tuttavia mi si sono presentate delle situazioni ambigue che ora riporto.
1.seguendo l'esempio del testo ho creato una classe clsPersona e ho
dichiarato due proprietà Public, nome e cognome come stringhe
    Nei moduli del form posso fare riferimento a queste due proprietà. Se
cambio il nome di queste due proprietà in m_nome e m_cognome, commentando le
due   precedenti dichiarazioni io posso ancora ugualmente fare riferimento a
nome e cognome, oltre che a m_nome e m_cognome. Perchè?
2.Quando creo le funzioni Property, come argomento mi ritrovo un vNewValue
passato come ByVal. Cosa è vNewValue? Su MSDN non sono riuscito a trovarlo.
3.Perhè quando ho creato un funzione all'interno della classe, cercando di
usare indistintamente dataDiNascita e m_dataDiNascita ho ottenuto errore,
mentre ho potuto usare sia nome - cognome che m_nome - m_cognome? Forse
perchè ho dichiarato immediatamente m_dataDiNascita e VB praticamente 'non
si ricorda' di una mia dichiarazione come dataDiNascita semplicemente?
Ringraziandovi per l'aiuto vi posto il codice completo fino ad ora e vi
auguro buon lavoro.
_______________________________________________________________________
Option Explicit
'                    QUESTO E' IL NOSTRO PRIMO MODULO DI CLASSE
'Dichiariamo le prime due variabili
'Public nome As String, cognome as string
Public m_nome As String
Public m_cognome As String
Public m_dataDiNascita As Date
Public Property Get nome() As String
'Restituisci il valore corrente della variabile membro.
nome = m_nome
End Property
Public Property Let nome(ByVal vNewValue As String)
'Provoca un errore se viene tentata un'assegnazione non valida
If vNewValue = "" Then Err.Raise 5
    m_nome = vNewValue
End If
End Property
Public Property Get cognome() As String
cognome = m_cognome
End Property
Public Property Let cognome(ByVal vNewValue As String)
If vNewValue = "" Then Err.Raise 5
    m_cognome = vNewValue
End If
End Property
Public Property Get dataDiNascita() As Date
data = m_dataDiNascita
End Property
Public Property Let dataDiNascita(ByVal vNewValue As Date)
If vNewValue >= Now() Then Err.Raise 1001, , "Data non valida."
    m_dataDiNascita = vNewValue
End Property
Public Function nomeCompleto() As String
nomeCompleto = nome & " " & cognome & " " & m_dataDiNascita
End Function
____________________________________________________________________________
__
Option Explicit
Private Sub creaPersona_Click()
'Una volta creata la classe dichiariamo una varibile oggetto che fa
riferimento
'a tale classe. Posso anche dichiarare tale variabile ad 'istanziazione
automatica'
'usando la seg. sintassi: Dim persona As New clsPersona.
Dim persona As clsPersona 'Variabile oggetto dichiarata
Set persona = New clsPersona 'Variabile oggetto creata
'Variabili assegnate
persona.m_nome = "Marco"
persona.m_cognome = "Valia"
persona.m_dataDiNascita = "08/11/1983"
'Stampa risultato
If Not (persona Is Nothing) Then 'Controlla che ci sia un riferimento valido
qualora
                                 'venga omessa la creazione tramite
l'istruzione Set.
    'Debug.Print persona.m_nome & " " & persona.m_cognome & " " &
persona.m_dataDiNascita
    Debug.Print persona.nomeCompleto
End If
End Sub
____________________________________________________________________________
__

si ricorda' di una mia dichiarazione come dataDiNascita semplicemente?
mmm... che errore esattamente? Occhio alle conversioni tra tipi.
Ciao,
Moreno
#sirri#@#
morenosoft.com#
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

 si ricorda' di una mia dichiarazione come dataDiNascita semplicemente?
Hmmm.... passo! non ho capito bene la domanda :-)
[SNIP]
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 mmm... che errore esattamente? Occhio alle conversioni tra tipi.
mi dice semplicemente 'Variabile non ddfinita'. Cmq per quanto riguarda la
violazione dell'incapsulamento, il fatto è che dichiarandole come Private
non riuscivo a farle vedere......:)
Grazie mille cmq! :)

 [SNIP]
Praticamente se uso semplicemente dataDiNascita, la variabile non viene
vista. Vengono viste invece le altre variaibli omonime che non usano m_
come prefisso e che sono commentate, come riportato nel codice. Comincio a
pensare una cosa, che l'area di memoria ad esse associate continua ad essere
assegnata......Boh!

non riuscivo a farle vedere......:)
Ovvio! Ora hai capito il perché _non devi_ farle vedere?
Ciao,
Moreno
#sirri#@#morenosoft#.com


"songohan" <fan...@TuttiILamer.it> scrisse:

Se leggi bene le risposte che ti hanno dato, dovresti arrivarci da solo ;-)
se invece non ci arrivi continua a leggere
Nel secondo caso funziona perchè in realtà hai 4 proprieta:
m_nome
m_cognome
nome
cognome
nel primo caso invece le proprietà sono solo 1
dataDiNascita
oppure
m_dataDiNascita
Devi stare attento perché qualsiasi variabile dichiarata pubblica all'interno di
un modulo di classe viene interpretata come una proprietà della classe stessa
(anche se non è il modo migliore di dichiararle).
Ciao 
VB