Hallo bin gerade ein bisschen verwirrt.
Habe ich doch in der Schule gelernt, dass ich auf Private Deklarierte Variablen keinen Zugriff habe.
Nun habe ich mal meine erste eigene Klasse geschrieben ( Versuche mal richtig zu programmieren und nicht immer nur Klassen zu benutzen), Habe einen Satz Öffentliche Variablen geschrieben und einen Private.
' Functions which are public
' Variables which are Public and read only
Declare Public Property Get Comment As String
Declare Public Property Get Error As Boolean
Declare Public Property Get ErrorCode As String
Declare Public Property Get ErrorMessage As String
Declare Public Property Get Number As Integer
Declare Public Property Get RequestType As String
Declare Public Property Get State As String
Declare Public Property Get Status As String
Declare Public Property Get isReady As Boolean
' Variables which are only used by the object himself
Private docRequest As NotesDocument
Private docENDRARequest As NotesDocument
Private strComment As String ' comment
Private strErrorCode As String ' errorCode
Private strErrorMessage As String ' errorMessage
Private strRequestType As String ' type oh the request
Private strRequestState As String ' the state for tester, like 1 for waiting , 2 for active, 3 for ready
Private strRequestStatus As String ' the status of the request, like 50 waiting for adminP
Private intRequestNumber As Integer
Private bolError As Boolean
Private bolIsReady As Boolean
So , warum sehe ich nun im Debugger, die Privaten Variablen und nicht die Öffentlichen ? ???
Ahso habe auch diesen Block geschrieben
' this block sets the public information 4 the object
Public Property Get isReady As Boolean
isReady = bolIsReady
End Property
Public Property Get Comment As String
Comment = strComment
End Property
Public Property Get ErrorCode As String
ErrorCode = strErrorCode
End Property
Public Property Get ErrorMessage As String
ErrorMessage = strErrorMessage
End Property
Public Property Get Number As Integer
Number = intRequestNumber
End Property
Public Property Get RequestType As String
RequestType = strRequestType
End Property
Public Property Get State As String
State = strRequestState
End Property
Public Property Get Status As String
Status = strRequestStatus
End Property
Die Zugriffs-Modifier regeln die Sichtbarkeit von.
Wenn ich mich recht erinnere sind private Members in Notes Klassen aus allen Funktionen, Methoden, derselben Scriptbibliothek, Agent, etc. sichtbar.
Das ist eine höhere Sichtbarkeit als etwa private in Java oder C++.
Die Zugriffs-Modifizierer sind ein Hilfsmittel, um Code übersichtlich zu strukturieren. Kein Sicherheitsfeature.
In Java sind private Methoden und Properties tatsächlich nur aus einem Objekt dieser Klasse sichtbar. Debugger zeigen es trotzdem an. Man kann nämlich mittels ein paar "Tricks" (introspection, reflection) die private members sozusagen auf public umschiessen. Genau so ist das auch in den Java-Debuggern implementiert.
Der Notes-Debugger zeigt keine Properties an. Sowas würde er natürlich anzeigen.
Public strComment As String
Nur eben keine Properties.
Wenn du in einer Script-Bibliothek eine Klasse hast, kannst du aus z.B. Agenten (oder andere ScriptLibraries), die diese Scriptbibliothek benutzen, nicht auf die privaten Member der Klasse direkt zugreifen.
Aber aus einer anderen Klasse oder Funktion dieser Scriptbibliothek schon. Private in Notes entspricht etwa "package-private" in Java (wo kein Zugriffsmodifier steht) nicht private.