Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Wie funktioniert das mit mit Visual Basic und den Klasseneigensc

PaoloP / 6 Antworten / Baumansicht 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
PaoloP T-Rex „Zuerst mal: Dein Beispiel ist Quark, weil es gar nicht lauffähig ist. So sollte...“
Optionen

Also erstmal danke. Ich habe bei einem Freund in das Programmierhandbuch von VB geschaut und in den 'Richtlinien und Empfehlungen für Objektmodelle in ActiveX Komponenten' steht das man das am besten über die Instancing-Eigenschaft macht. Ich kann dem Client also das Erstellen und meiner Objekt-Klasse grundsätzlich verbieten. Für die Ausgabe werde ich einen CopyConsttruktor schreiben(oder was immer das bei VB ist, muss ich mal schauen) Damit sind meine Probleme der von mir nicht kontrollierbaren Verweise auf Objekte in meiner Komponente sowie ein vollständiges Const ja quasi gelöst.

Ja kann sein das es nicht läuft was ich da geschrieben habe.
VB ist nicht unbedingt meine Welt und es war aus'm Kopf aufs Reisbrett etwas entnervt weil lange nicht gepennt und am Rechner gesessen.

Danke Deine Infos waren mir sehr hilfreich.
Was ist denn ein 'Komma' ?

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
T-Rex PaoloP „Also erstmal danke. Ich habe bei einem Freund in das Programmierhandbuch von VB...“
Optionen
Was ist denn ein 'Komma'?
Ist diese Frage ernst gemeint?

Ein Komma ist ein Satzzeichen, welches sporadisch in einen Text gestreut wird, um die Lesbarkeit zu erhöhen und sinnvolle Abschnitte gegeneinander abzugrenzen.

Das hatte ich nur geschrieben, weil Dein letzter Satz schon fast ein Bandwurm war, in dem man raten kann, wo ein Hauptsatz aufhört und ein Nebensatz anfängt.
 GrüßeT-Rex 
bei Antwort benachrichtigen
PaoloP T-Rex „Zuerst mal: Dein Beispiel ist Quark, weil es gar nicht lauffähig ist. So sollte...“
Optionen

Hilfe

Ich habe keine Ahnung was hier gerade falsch gelaufen ist.
Ich hab auf Posten geklickt ist aber nix passiert.
Und als nach nach einer Minute doch was passiert ist stand das so oft da.

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
T-Rex PaoloP „Hilfe Ich habe keine Ahnung was hier gerade falsch gelaufen ist. Ich hab auf...“
Optionen

Du solltest Deinen Kaffeekonsum einschränken ;-)

 GrüßeT-Rex 
bei Antwort benachrichtigen
PaoloP T-Rex „Du solltest Deinen Kaffeekonsum einschränken - “
Optionen

Ja das höre ich oft in letzter Zeit ...
Ein Komma wird also sporadisch eingestreut.
Das merk ich mir :-p Geht das auch in VB ?

PS: Wie gesagt warum mein Posting hier so oft steht weiss ich nicht.
Ich fühle mich da unschuldig.

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen