Le proprietà di qualsiasi oggetto sono sempre private, come privati sono i simboli a cui esse fanno riferimento. Qualunque altro oggetto debba accedere al valore di uno dei suddetti simboli deve farlo attraverso la proprietà cui è associato.
Per dichiarare una proprietà la strada è una sola: utilizzare la parola chiave Property
Property Nome As Tipo definisce una proprietà in lettura/scrittura
Property Read Nome as Tipo definisce una priprietà in sola lettura.
Tieni presente che l'IDE crea automaticamente le procedure di gestione delle proprietà alla pressione del tasto Invio
Alla proprietà viene poi associato un simbolo dello stesso tipo per contenerne il valore.
Supponi di avere una classe Automobili, per ciascuna automibile dovrai gestire diversi parametri:
- Colore
- Cilindrata
- Modello
...
avremo quindi la Classe automobile:
' Gambas class file
' definisco le properità
Property Colore As Integer
Property Modello As String
Property Cilindrata As String
Property Read Allestimento as String
' definisco i simboli associati alle proprietà
Private $Colore As Integer
Private $Modello As String
Private $Cilindrata As String
private $Allestimento as String
Public Sub _new(versione As String)
$Allestimento = versione
End
' le funzioniutilizzate per gestire le proprietà
Private Function Colore_Read() As Integer
Return $Colore
End
Private Sub Colore_Write(Value As Integer)
$Colore = Value
End
Private Function Modello_Read() As String
Return $Modello
End
Private Sub Modello_Write(Value As String)
$Modello = Value
End
Private Function Cilindrata_Read() As String
Return $Cilindrata
End
Private Sub Cilindrata_Write(Value As String)
$Cilindrata = Value
End
Private Function Allestimento_Read()
Return $Allestimento
End
Nella classe ConfiguraVettura avremo:
Public Sub Configura()
Dim Vettura As Automobile
With Vettura = New Automobile("luxury")
' la proprietà Allestimento in sola lettura viene impostata tramite la sub _new(...)
.Cilindrata = "1368" ' imposto la proprietà Cilindrata
.Colore = Color.Red ' imposto la proprietà Colore
.Modello = "sotema"
End With
End
Ciao sotema, :ciao:
volevo segnalare che a questa riga:
Private Function Allestimento_Read()
viene sollevato un errore; hai dimenticato di scrivere:
Private Function Allestimento_Read() As String
Va be'... ad ogni modo, a me premeva domandare quale differenza sostanziale vi sarebbe fra una Classe specifica, nella quale sono definite le Proprietà, e questa altra Classe specifica più semplice e spartana:
Public Colore As Integer
Public Modello As String
Public Cilindrata As String
Public Allestimento As String
Aggiungo
la classe si può anche inizializzare passando tutti i parametri alla funzione _new
public sub _new (prop1 as integer, prop2 as string , prop3 as boolean, prop4 as byte)
$proprieta1 = prop1
$proprieta2 = prop2
$proprieta3 = prop3
$proprieta4 = prop4
end
è corretto anche questo metodo?
Il metodo suggerito da Sotema però mi sembra forse quello più corretto, confermi?
Nella programmazione ad oggetti, ritengo sia una soluzione migliore mantenere le variabili Private ed usare le proprietà dell'oggetto, appunto, per impostarne i valori. La qual cosa permette inoltre un maggior controllo, in quanto all'interno delle procedure di scrittura/lettura delle proprietà puoi inserire codice di verifica e gestione, cosa che non è possibile con una variabile pubblica.
Aggiungo
la classe si può anche inizializzare passando tutti i parametri alla funzione _new
public sub _new (prop1 as integer, prop2 as string , prop3 as boolean, prop4 as byte)
$proprieta1 = prop1
$proprieta2 = prop2
$proprieta3 = prop3
$proprieta4 = prop4
end
In questo caso utilizzi delle variabili che possono anche essere private, purchè globali. Ma ti consiglierei di utilizzare l'opzione Optional:
Public Sub _new(Optional prop1 as integer...)
...
End
perchè non è sicuro che ogni qualvolta instanzi la classe tu abbia la possibilità di passargli che parametri.