[VB 2008] Zugriff auf "Protected" member

03/10/2010 - 14:24 von Armin Zingler | Report spam
Hi,

mir sind die Zugriffsmodifizierer wie Private, Public, Friend, Protected
(eigentlich) völlig klar. Der Modifizierer sagt aus, _von wo aus_ auf
das Member zugegriffen werden kann. Richtig?

Bei "Protected" steht geschrieben, dass von derselben Klasse oder
von einer abgeleiteten Klasse aus zugegriffen werden darf.
Das *einzige* Kriterium dafür, ob der Zugriff erlaubt ist, ist also
die Stelle im Code, an der der Zugriff steht. Erfolgt der Zugriff
in derselben Klasse oder in einer abgeleiteten, dann sollte der Zugriff
erlaubt sein. Richtig?

Das stimmt aber nicht bei "Protected". Zusàtzlich gilt nàmlich
die Einschrànkung: Der Zugriff ist nur auf dieselbe Instanz erlaubt,
d.h. über (explizites oder implizites) "Me". Beispiel:

Class Class1
Protected var As Integer
End Class

Class Class2
Inherits Class1

Sub bla()
Dim o As New Class1

Me.var = 1 'oder var = 1
o.var = 2 'ERROR: not accessible because Protected

End Sub
End Class

Ist diese Einschrànkung irgendwo dokumentiert?


Armin
 

Lesen sie die antworten

#1 Harald M. Genauck
03/10/2010 - 15:04 | Warnen spam
Hallo Armin,

mir sind die Zugriffsmodifizierer wie Private, Public, Friend,
Protected
(eigentlich) völlig klar. Der Modifizierer sagt aus, _von wo aus_
auf
das Member zugegriffen werden kann. Richtig?



Richtig.

Bei "Protected" steht geschrieben, dass von derselben Klasse oder
von einer abgeleiteten Klasse aus zugegriffen werden darf.
Das *einzige* Kriterium dafür, ob der Zugriff erlaubt ist, ist also
die Stelle im Code, an der der Zugriff steht. Erfolgt der Zugriff
in derselben Klasse oder in einer abgeleiteten, dann sollte der
Zugriff
erlaubt sein. Richtig?



Dein Schluss ist zwar richtig, aber geht von einer falschen Pràmisse
aus. Die Definition von Protected ist nàmlich falsch bzw. zumindest
ungenau formuliert (liegt wohl an dem Problem, dass so mancher [Autor]
nach wie vor nicht zwischen "Klassen" und "Instanzen" zu unterscheiden
weiß).

Korrekt müsste es (das Original aus der deutschen MSDN, englisch ist
1:1 analog) heißen:

Gibt an, dass auf ein oder mehrere deklarierte Programmierelement/e
nur aus DER GLEICHEN INSTANZ seiner bzw. ihrer eigenen Klasse oder aus
einer abgeleiteten Klasse heraus zugegriffen werden kann.

Das stimmt aber nicht bei "Protected". Zusàtzlich gilt nàmlich
die Einschrànkung: Der Zugriff ist nur auf dieselbe Instanz erlaubt,



Richtig. Genau darin liegt der Fehler in der Doku.

Bzw. - genau genommen beschreibt die Doku das Verhalten für "Protected
Shared".
;-)


Viele Grüße

Harald M. Genauck
"aboutDOTnet" - http://www.aboutdotnet.de
"ABOUT Visual Basic" - http://www.aboutvb.de

Ähnliche fragen