Questa è la classe base:
Class miaClasse
Private nome As Int32 = 444
Private Property proprieta() As Int32
Get
Return nome
End Get
Set(ByVal value As Int32)
nome = value
End Set
End Property
Sub propertySetting(ByVal valore As Int32)
proprieta = valore
End Sub
Sub metodo()
MsgBox(proprieta)
End Sub
End Class
E creo una classe derivata:
Class miaClasseDerivata
Inherits miaClasse
Sub altroMetodo()
MsgBox("Io sono una classe derivata e questa è la mia proprietà " & proprieta)
End Sub
End Class
Bene: ottengo un errore che mi viene notificato dall'IDE già in fase di scrittura del codice: Errore 1 'WindowsApplication1.miaClasse.Private Property proprieta As Integer' non è accessibile in questo contesto perché è 'Private'. C:\Users\Antonello\documents\visual studio 2010\Projects\WindowsApplication1\WindowsApplication1\Form1.vb 37 77 WindowsApplication1
Questo perchè il metodo della classe derivata non può accedere a una proprietà Private della classe madre.
Però, pur nella classe derivata, il metodo ereditato dalla classe madre può accedere a un membro Private.
Istanziando la classe derivata e chiamando un metodo ereditato dalla classe madre, questo metodo può mostrare tranquillamente in una MessageBox il valore della proprietà Private.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim questaClasse As New miaClasseDerivata
questaClasse.metodo()
questaClasse.metodo()
End Sub
Tutto questo va tenuto bene in mente.
Adesso faccio in modo che il metodo della classe derivata possa avere accesso alla proprietà, dichiarandola Protected:
Class miaClasse
Private nome As Int32 = 444
Protected Property proprieta() As Int32
Get
Return nome
End Get
Set(ByVal value As Int32)
nome = value
End Set
End Property
Sub propertySetting(ByVal valore As Int32)
proprieta = valore
End Sub
Sub metodo()
MsgBox(proprieta)
End Sub
End Class
Class miaClasseDerivata
Inherits miaClasse
Sub altroMetodo()
MsgBox(proprieta)
End Sub
End Class
Non ottengo errori in fase di scrittura del codice......e istanziando in questo modo:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim questaClasse As New miaClasseDerivata
questaClasse.altroMetodo()
End Sub
...ottengo una MessageBox con il valore della proprietà ereditata dalla classe madre!
Con la proprietà Public il problema, ovviamente, non si pone:
Class miaClasse
Private nome As Int32 = 444
Public Property proprieta() As Int32
Get
Return nome
End Get
Set(ByVal value As Int32)
nome = value
End Set
End Property
Sub propertySetting(ByVal valore As Int32)
proprieta = valore
End Sub
Sub metodo()
MsgBox(proprieta)
End Sub
End Class
Class miaClasseDerivata
Inherits miaClasse
Sub altroMetodo()
MsgBox(proprieta)
End Sub
End Class
Nessun commento:
Posta un commento