Newsgroup: it.comp.lang.visual-basic
Titolo: Friend statement (non per newbie)

Dunque stavo lavorando su di una classe dataaware
che mi prende i dati da una origine ... e con il
databinding mi riempe le proprietà della mia classe.
Funziona tutto ok, senonchè volevo fare la chicca di
turno; ovvero esporre come public la proprietà get
e mettere come friend la let.
Così facendo il tutto va a puttane, vb si lamenta
che non riesce a trovare la proprietà let.
Ma se è vero che la friend è una specie di public,
ma consente al metodo/proprietà/funzione di essere
visto solo all'interno della clasee, perchè l'oggetto
msdb (data binding), istanziato nella classe stessa
non riesce a vedere il metodo friend??
Grazie per gli aiuti.
Andrea

 non riesce a vedere il metodo friend??
Stai facendo confusione con lo scope della friend: una friend property puo'
essere vista solo da oggetti il cui *codice* sia contenuto all'interno dello
stesso progetto.
Ciaotutti,
*

Per l'appunto il mio databinding object è all'interno
dello stesso progetto.
Quindi dovrebbe vederlo.
Ciao
Andrea

 Quindi dovrebbe vederlo.
Posta il codice...
Ciaotutti,
*

A te. Ti posso assicurare che la classe se metto la
proprietą su public funziona correttamente.
La classe WmGestPUtenti.Utenti, dello stesso progetto
č una datasource e recupera i dati come mi interessano
a me. Nella fattispecie del caso recupera i tre campi
Atiivo, FullName e ID. Con il databing poi non faccio
altro che popolarmi le proprietą locali senza inutili
giri del tipo m_attivo = rs("USR_ATTIVO").
Fa tutto lui.
Ciao
Andrea
*****************************
Private WithEvents m_Utenti As WmGestPUtenti.Utenti
Private oBindCollect As MSBind.BindingCollection
Private wAdoError As Boolean
Private bConnPathSetup As Boolean
Private bDBVersionSetup As Boolean
Private bDBServerSetup As Boolean
Private m_ConnPath As String 'Copia locale.
Private m_DbVersion As Integer 'Copia locale.
Private m_DbServerType As Integer 'Copia locale.
Private m_Attivo As String 'Copia locale.
Private m_FullName As String 'Copia locale.
Private m_ID As Long 'Copia locale.
Public Type Permission
  View As Boolean
  Insert As Boolean
  Update As Boolean
  Delete As Boolean
  Print As Boolean
End Type
Event ErrorRaised()
Public Property Let DbVersion(ByVal NewDbVersion As WmGestPQuery.DbVersion)
  m_DbVersion = NewDbVersion
  bDBVersionSetup = True
End Property
Public Property Let DbServerType(ByVal NewServerType As
WmGestPQuery.DbServerType)
  m_DbServerType = NewServerType
  bDBServerSetup = True
End Property
Public Property Let ConnPath(ByVal NewConnPath As String)
  m_ConnPath = NewConnPath
  If (m_ConnPath = "") Then
    bConnPathSetup = False
  Else
    bConnPathSetup = True
  End If
End Property
Public Property Get ID() As Long
  ID = m_ID
End Property
Public Property Let ID(ByVal NewValue As Long)
  m_ID = NewValue
End Property
Public Property Let Attivo(ByVal NewValue As String)
  m_Attivo = NewValue
End Property
Public Property Get Attivo() As String
  Attivo = m_Attivo
End Property
Public Property Get FullName() As String
  FullName = m_FullName
End Property
Friend Property Let FullName(ByVal NewValue As String)
  m_FullName = NewValue
End Property
Public Property Get Errors() As WmADOSupport.Errors
  Set Errors = wADOSPobj.Errors
End Property
'******* Eventi
Private Sub m_Utenti_ErrorRaised()
  RaiseEvent ErrorRaised
End Sub
Private Sub wADOSPobj_ErrorRaised()
  RaiseEvent ErrorRaised
  wAdoError = True
End Sub
'******* Procedure interne
Private Sub Class_Initialize()
  Set wADOSPobj = New WmADOSupport.StoredProcedure
  Set oBindCollect = New MSBind.BindingCollection
End Sub
Private Sub Class_Terminate()
  Set wADOSPobj = Nothing
  Set oBindCollect = Nothing
End Sub
Public Function GetUserInfoByLogin()
  Set m_Utenti = New WmGestPUtenti.Utenti
  m_Utenti.ConnPath = m_ConnPath
  m_Utenti.DbServerType = m_DbServerType
  m_Utenti.DbVersion = m_DbVersion
  m_Utenti.Login = m_Login
  oBindCollect.DataMember = "GetUserInfoByLogin"
  Set oBindCollect.DataSource = m_Utenti
  oBindCollect.Add Me, "ID", "USR_ID"
  oBindCollect.Add Me, "FullName", "USR_FULLNAME"
  oBindCollect.Add Me, "Attivo", "USR_ATTIVO"
  Set m_Utenti = Nothing
End Function

 proprietà su public funziona correttamente.
  oBindCollect.Add Me, "FullName", "USR_FULLNAME"
Ovvero:
"Oh codice dell'oggetto oBindCollect, il cui codice risiede nella DLL
MSBind, prendi questa mia proprieta' (che non puoi vedere perche' la vedono
solo coloro il cui codice e' nel mio progetto) e fanne uso".
E la sua risposta e': "Oh ignoto oggetto chiamante, la cui proprieta' io non
posso vedere perche' il mio codice non risiede nel tuo progetto, rendi la
proprieta' pubblica, sicche' essa venga esposta nella tua interfaccia COM e
mi sia accessibile".
Ciaotutti,
*

 mi sia accessibile".
LOL... ma chiarissimo...   ;-)
ciao
ugo

 E la sua risposta e': "Oh ignoto oggetto chiamante, la cui proprieta'
[...]
ROTFL! :-)

 mi sia accessibile".
cioe', in basic anziche' in aulic :
"dammela !"
interfaccia com.
i giovani d'oggi spoeticizzano tutto.
ma forse e' a questo che si riferiva il
    come from
(il reciproco del go to)
del jargon file...

Mumble .... ero convinto che potesse
proprio perchè lo istanziavo nell'oggetto stesso.
Cioè ero convinto che potesse l'oggetto data
binding.
Cribbio d'un cribbio.
Vabbè lascierò i metodi public ben sapendo
che con le let non ci faccio na mazza,
perchè le function che immettono dati hanno
i loro argomenti privati, che per quanto
coincidano il più delle volte con le proprietà
stesse, per questioni di chiarezza mi sembrava
più logico usarle così, anche perchè almeno così
sono sicuro, che essendo argomenti, devo
per forza impostarli e non sono - magari - valori
precedentemente impostati.
Thanks.
Ciao
Andrea