|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Dublino
Messaggi: 878
|
[VB6] Potreste spiegarmi queste poche righe per favore?
Si tratta di implementare una funzione write-once/read-many, utilizzando una variabile statica, in una classe.
Codice:
Private m_ID As Long ' all'interno del modulo di classe Property Get ID() As Long ID = m_ID End Property Public Property Let ID(ByVal newValue As Long) Static InitDone As Boolean If InitDone Then Err.Raise 1002, , "Write-once property" InitDone = True m_ID = newValue End Property Quando è che viene creata questa variabile InitDone? Forse quando si fa riferimento per la prima volta alla proprietà ID (in runtime)? Se così fosse, la variabile, essendo statica, provoca sempre un errore dopo la prima "chiamata" essendo sempre True? Grazie mille... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Re: [VB6] Potreste spiegarmi queste poche righe per favore?
Hai capito perfettamente. In VB6, le variabili numeriche (comprese quelle boolean) vengono inizializzate sempre sul valore 0, che corrisponde a False per il tipo Boolean (0=False, -1=True). Nell'esempio che hai riportato, si sfrutta il fatto che la variabile InitDone, dichiarata Static, non perde il valore contenuto una volta terminata la Property Let. In questo modo, ad un successivo tentativo di accesso alla proprietà, InitDone risulta True e viene generato un errore di runtime.
__________________
Chi non cerca trova. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Dublino
Messaggi: 878
|
grazie mille, il discorso di 0 = False e -1 = True mi era sfuggito
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Dublino
Messaggi: 878
|
ok, passiamo oltre:
Codice:
Property Get CompleteName() As String CompleteName = FirstName & " " & LastName End Property Property Let CompleteName(ByVal newValue As String) Dim items() As String items() = Split(newValue) If UBound(items) <> 1 Then Err.Raise 5 FirstName = items(0): LastName = items(1) End Property Questo codice dovrebbe servire per assegnare le proprietà FirstName e LastName in base a una terza proprietà CompleteName, ma non capisco chi è che assegna un valore al parametro newValue e come i due elementi dell'array vengano divisi... |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
La Property Let CompleteName viene richiamata quando il client (cioè quella porzione di codice che usa la proprietà di questa classe) fa una cosa tipo questa:
Codice:
Dim c As QuestaClasse c.CompleteName = "Mario Rossi" Questa azione richiama la Property Let, la quale in sostanza cerca di dividere il nome dal cognome per memorizzarli nei due campi separati FirstName e LastName. Viene per prima cosa dichiarato un array dinamico items(), senza specificarne la dimensione. La funzione Split tenta di spezzettare il valore passato alla proprietà ("Mario Rossi") memorizzato temporaneamente nella variabile newValue. Split spezza la stringa e mette i risultati in items() in questo modo: items(0) = "Mario" items(1) = "Rossi" L'istruzione If si accerta che l'array sia composto da soli due elementi, l'ultima riga assegna ai campi FirstName e LastName i valori così ottenuti. Per capire meglio la funzione Split guardati l'help in linea di VB oppure in MSDN (se ce l'hai).
__________________
Chi non cerca trova. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Dublino
Messaggi: 878
|
grazie, ho già guardato l'MSDN, ho i due cd di VB6 Learning Edition.
Ho ancora questi due dubbi: 1) in quale modo la stringa viene memorizzata in newValue? Intendo quale istruzione fa ciò? 2) La funzione Split quali separatori utilizza per dividere una stringa? Ciao e grazie ancora! |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Quote:
2) la funzione Split ha un parametro opzionale per specificare il carattere separatore, guardati la documentazione
__________________
Chi non cerca trova. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2001
Città: Dublino
Messaggi: 878
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:26.



















