Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Wie funktioniert das mit mit Visual Basic und den Klasseneigensc

PaoloP / 6 Antworten / Flachansicht Nickles

Also ich erstelle in Visual Basic eine Klasse definiere eine Eigenschaft.


Private cCol as New Collection


PublicProperty Get meineEigenschaft() As Collection
   meineEigenschaft = cCol
End Property


Eine Set/Let Prozedur setze ich nicht damit ist die Eigenschaft nur lesend.
Aber es ist doch ein Object-Zeiger das heisst die Eigenschaften dieses Objects 
bei Collections also die Items können trotzdem vom Client manipuliert werden oder ?
Was passiert wenn der Client sich den Object-Zeiger kopiert?
Kann er dann etwas damit anstellen? Und wenn ich die Eigenschaft in der Klasse
auf Nothing setze verhindert der kopierte Object-Zeiger des Clients dann das sich meine Eigenschaft löscht weil ja noch eine Referenz darauf besteht? Ich bin echt Verwirrt :-(


Viele Grüsse
Mic



 




 

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
T-Rex PaoloP „Wie funktioniert das mit mit Visual Basic und den Klasseneigensc“
Optionen

Zuerst mal:
Dein Beispiel ist Quark, weil es gar nicht lauffähig ist.

So sollte es korrekt sein:


Option Explicit

Private cCol As VBA.Collection

Public Property Get meineEigenschaft() As Collection
    Set meineEigenschaft = cCol
End Property

Private Sub Class_Initialize()
    Set cCol = New VBA.Collection
End Sub

Private Sub Class_Terminate()
    Set cCol = Nothing
End Sub


Eine Set/Let Prozedur setze ich nicht damit ist die Eigenschaft nur lesend.
Aber es ist doch ein Object-Zeiger das heisst die Eigenschaften dieses Objects
bei Collections also die Items können trotzdem vom Client manipuliert werden oder ?

Korrekt. Du liest ja auch nur den Verweis auf die Collection aus, die Elemente in der Collection sind davon absolut unberührt.

Was passiert wenn der Client sich den Object-Zeiger kopiert?
Dann gibt es zwei Verweise auf die Collection. Was soll sonst passieren?

Kann er dann etwas damit anstellen?
Ja sicher. Er kann alles damit machen, was möglich ist. Er ist nicht auf von Dir geplante Einschränkungen angewiesen.

Und wenn ich die Eigenschaft in der Klasse
auf Nothing setze verhindert der kopierte Object-Zeiger des Clients dann das sich meine Eigenschaft löscht weil ja noch eine Referenz darauf besteht?

Das ist richtig. Weil noch ein Verweis auf die Collection besteht, vernichtet die Garbage-Collection die Daten (noch) nicht.

Ich bin echt Verwirrt
Wärest Du nicht, wenn Du mal ein Komma setzen würdest ;-)
 GrüßeT-Rex 
bei Antwort benachrichtigen