Klassen und Variablen
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Klassen und Variablen
Als Fortsetzung der Unterweisungen auf unserem XUG-Treffen vor 1 Woche eine Frage von einem Klassen-Dummy
Ich habe eine recht umfangreiche Klasse bekommen. Der Programmierer hat dabei mit den internen Variablen sehr stark mit PRIVATEs gearbeitet. Einige davon kann ich locker in LOCALs umwandeln. Andere nicht. Kann ich diese einfach als VARs in die Klasse einbauen? Z. B. als PROTECTED? Die sind wirklich nur für intern, von außen sollen die nicht sichtbar und manipulierbar sein.
Jan
Ich habe eine recht umfangreiche Klasse bekommen. Der Programmierer hat dabei mit den internen Variablen sehr stark mit PRIVATEs gearbeitet. Einige davon kann ich locker in LOCALs umwandeln. Andere nicht. Kann ich diese einfach als VARs in die Klasse einbauen? Z. B. als PROTECTED? Die sind wirklich nur für intern, von außen sollen die nicht sichtbar und manipulierbar sein.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Klassen und Variablen
Hallo Jan,
wenn eine Variable ausschließlich in einer Methode benutzt werden soll, dann nimm LOCAL, ansonsten nimm PROTECTED dann passt das.
EXPORTED wird dann nötig, wenn du z.B. aus einem Code-Block oder von außen auf eine iVar zugreifen musst. Allerdings soll man eigentlich keine EXPORTED iVars verwenden, sondern nur PROTECTED und dann mit Access / Assign / oder normalen Methoden den Zugriff regeln (Kapselung)
wenn eine Variable ausschließlich in einer Methode benutzt werden soll, dann nimm LOCAL, ansonsten nimm PROTECTED dann passt das.
EXPORTED wird dann nötig, wenn du z.B. aus einem Code-Block oder von außen auf eine iVar zugreifen musst. Allerdings soll man eigentlich keine EXPORTED iVars verwenden, sondern nur PROTECTED und dann mit Access / Assign / oder normalen Methoden den Zugriff regeln (Kapselung)
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Klassen und Variablen
Nun habe ich damit aber ein Problem: Ich habe angefangen, die ganzen PRIVATs in VARs umzubauen. Sauarbeit, aber ich finde dabei auch stapelweise andere Fehler (und für den Code habe ich auch noch Geld gelassen )
Aber ich bekomme dauernd Laufzeitfehler (Unbekannte Variable) wenn ich soetwas machen möchte:
Warum? Ich habe der ::cVar einen Wert zugewiesen. Ich kann im Debugger sehen, daß der durch die Zuweisungszeile durchgelaufen ist. Den Wert von ::cVar selber sehe ich leider nicht.
Was ist mein Fehler dabei?
Jan
Aber ich bekomme dauernd Laufzeitfehler (Unbekannte Variable) wenn ich soetwas machen möchte:
Code: Alles auswählen
cWasAuchImmer := ::cVar
Was ist mein Fehler dabei?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Re: Klassen und Variablen
Aus Deiner Zeile Code läßt sich der Fehler nicht erkennen.
Folgende Fehlerursachen sind aufgrund der Fehlermeldung möglich.
::cVar ist:
- ist als hidden oder Protected definiert ( in der eigenen Klasse oder in der Super-Klasse)
- es handelt sich um eine Access Assign Mehode ( wie z.B: ::caption bei xbpStatic)
- die Member-Variable gibt es überhaupt nicht
Gruß, Olaf
Folgende Fehlerursachen sind aufgrund der Fehlermeldung möglich.
::cVar ist:
- ist als hidden oder Protected definiert ( in der eigenen Klasse oder in der Super-Klasse)
- es handelt sich um eine Access Assign Mehode ( wie z.B: ::caption bei xbpStatic)
- die Member-Variable gibt es überhaupt nicht
Gruß, Olaf
Zuletzt geändert von Lewi am Fr, 28. Nov 2008 18:05, insgesamt 3-mal geändert.
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Klassen und Variablen
hi,
oft hilft es wenn man erst nach dem :create() die Variabeln "belegt".
wenn du paar Zeile Code posten könntest ...
die Frage ist "wo" du die Zuweisung machst und wie deine Class "from" aussieht.Jan hat geschrieben: Aber ich bekomme dauernd Laufzeitfehler (Unbekannte Variable) wenn ich soetwas machen möchte:Warum? Ich habe der ::cVar einen Wert zugewiesen. Ich kann im Debugger sehen, daß der durch die Zuweisungszeile durchgelaufen ist. Den Wert von ::cVar selber sehe ich leider nicht.Code: Alles auswählen
cWasAuchImmer := ::cVar
oft hilft es wenn man erst nach dem :create() die Variabeln "belegt".
wenn du paar Zeile Code posten könntest ...
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Klassen und Variablen
Hallo Olaf, Hallo Jimmy,
also: Die cVar ist PROTECTED. Das hatte ich ja oben schon angefragt, soll ja lt. Hubert das richtige sein. Und vor der geposteten Zeile war die Zuweisung des Wertes an cVar. Ich hab das mit dem Debugger extra verfolgt.
Code posten ist etwas schwierig. Zum Einen ist der echt ellenlang, und ich müsste das ellenlange posten, damit der Sinn erscheint. Und zum Anderen geht das nicht, weil der Code nicht öffentlich ist (wie gesagt, ich hab dafür bezahlt, und der Besitzer möchte das nicht so unters Volk bringen)
Jan
also: Die cVar ist PROTECTED. Das hatte ich ja oben schon angefragt, soll ja lt. Hubert das richtige sein. Und vor der geposteten Zeile war die Zuweisung des Wertes an cVar. Ich hab das mit dem Debugger extra verfolgt.
Code posten ist etwas schwierig. Zum Einen ist der echt ellenlang, und ich müsste das ellenlange posten, damit der Sinn erscheint. Und zum Anderen geht das nicht, weil der Code nicht öffentlich ist (wie gesagt, ich hab dafür bezahlt, und der Besitzer möchte das nicht so unters Volk bringen)
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Klassen und Variablen
OK, super, ich glaub, ich hab den Fehler gefunden. Manchmal muß es einen einfach mal blitzartig überrollen.
Der Programmierer hatte das alles ja als PRIVATE deklariert. Da das alles in einer prg ist, funktioniert das dann auch. Nun habe ich das auf PROTECTED VARs umgestellt. Geht auch. Aber natürlich nur, solange das in der Klasse aufgerufen wird. Der ruft da aber eine STATIC FUNCTION auf, ohne die Variable zu übergeben! Klar, daß die Variable da unbekannt ist
Jan
Der Programmierer hatte das alles ja als PRIVATE deklariert. Da das alles in einer prg ist, funktioniert das dann auch. Nun habe ich das auf PROTECTED VARs umgestellt. Geht auch. Aber natürlich nur, solange das in der Klasse aufgerufen wird. Der ruft da aber eine STATIC FUNCTION auf, ohne die Variable zu übergeben! Klar, daß die Variable da unbekannt ist
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Re: Klassen und Variablen
Wenn Sie protected ist, dann kann auf die Membervarieble nur innerhalb der einzelnen Klassen-Methoden zugegriffen werden. Von "außen" ist die Variable nicht sichtbar. Wird eine Variable protected in einer Superklasse definiert, ist sie auch nicht bei den von der Super-Klasse abgeleiteten Klassen sichtbar.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16543
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 114 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Klassen und Variablen
Yup.
Was Jan vielleicht nehmen wollte, ist HIDDEN - vermute ich mal...
Viele Grüße,
Martin
Was Jan vielleicht nehmen wollte, ist HIDDEN - vermute ich mal...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Klassen und Variablen
hi,
Hast du in VX Crtl-Shift-R zum "austauschen" der Variablen benutzt ?
Tja wenn der Editor dir nicht alles anzeigt ...Jan hat geschrieben: Der ruft da aber eine STATIC FUNCTION auf, ohne die Variable zu übergeben! Klar, daß die Variable da unbekannt ist
Hast du in VX Crtl-Shift-R zum "austauschen" der Variablen benutzt ?
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Klassen und Variablen
Jimmy,
STRG-R. Und nein, nicht nur. Manchmal auch von Hand. Ich hab einfach die 2.500 Zeilen Code durchgearbeitet, und irgendwann lief bei den dutzenden von deklarierten PRIVATES die Konzentration aus dem Ruder. Und ich hab einfach ohne groß nachzusehen durchgeändert. Bin einfach durch die FUNCTIONS durchgerauscht, ohne das zu merken.
Martin,
wo genau liegt denn der Unterschied zwischen PROTECTED und HIDDEN, speziell in diesem Fall?
Jan
STRG-R. Und nein, nicht nur. Manchmal auch von Hand. Ich hab einfach die 2.500 Zeilen Code durchgearbeitet, und irgendwann lief bei den dutzenden von deklarierten PRIVATES die Konzentration aus dem Ruder. Und ich hab einfach ohne groß nachzusehen durchgeändert. Bin einfach durch die FUNCTIONS durchgerauscht, ohne das zu merken.
Martin,
wo genau liegt denn der Unterschied zwischen PROTECTED und HIDDEN, speziell in diesem Fall?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16543
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 114 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Klassen und Variablen
Jan,
das hatte ich am Samstag erklärt
Hat aber weniger was mit diesem Fall zu tun!
HIDDEN: Methoden/Vars sind nur innerhalb der Klasse und Instanzen sichtbar.
PROTECTED: Methoden/Vars sind nur inneralb der Klasse sichtbar.
In beiden Fällen kann nicht von aussen drauf zugegriffen werden!
Viele Grüße,
Martin
das hatte ich am Samstag erklärt
Hat aber weniger was mit diesem Fall zu tun!
HIDDEN: Methoden/Vars sind nur innerhalb der Klasse und Instanzen sichtbar.
PROTECTED: Methoden/Vars sind nur inneralb der Klasse sichtbar.
In beiden Fällen kann nicht von aussen drauf zugegriffen werden!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Klassen und Variablen
Martin,
immer diese Vorwürfe! Sei nachsichtig mit mir, immerhin wollt Ihr mich doch zum Klassendenken bekehren. Also Geduld!
Der feine Unterschied zwischen PROTECTED und HIDDEN war mir halt leider so spät abends nach unserer Firmenweihnachtsfeier nicht mehr so ganz geläufig. Ich denke aber, daß PROTECTED hier für mich die richtige(re) Lösung sein wird.
Jan
immer diese Vorwürfe! Sei nachsichtig mit mir, immerhin wollt Ihr mich doch zum Klassendenken bekehren. Also Geduld!
Der feine Unterschied zwischen PROTECTED und HIDDEN war mir halt leider so spät abends nach unserer Firmenweihnachtsfeier nicht mehr so ganz geläufig. Ich denke aber, daß PROTECTED hier für mich die richtige(re) Lösung sein wird.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Klassen und Variablen
Hallo Jan,
Bei der Syntax:
::MyVar - geht nur in einer Methode dieser Klasse, da :: == SELF !
Von außen:
MyClassVar:MyVar -> MyClassVar könnte z.B. als Parameter übergeben worden sein !
PS:
ich wollte es am Anfang nicht schreiben, aber wenn du den Quellcode auch noch gekauft hast:
Ein Programmierer, der Klassen und PRIVATE mischt ...
ganz oben habe ich geschrieben, dass alles was außerhalb benötigt wird auch exported (nicht empfohlen) oder per Access/Assign Methode (diese exported) zur Verfügung gestellt werden muss !JAN hat geschrieben: Z. B. als PROTECTED? Die sind wirklich nur für intern, von außen sollen die nicht sichtbar und manipulierbar sein.
Bei der Syntax:
::MyVar - geht nur in einer Methode dieser Klasse, da :: == SELF !
Von außen:
MyClassVar:MyVar -> MyClassVar könnte z.B. als Parameter übergeben worden sein !
PS:
ich wollte es am Anfang nicht schreiben, aber wenn du den Quellcode auch noch gekauft hast:
Ein Programmierer, der Klassen und PRIVATE mischt ...
Gruß
Hubert
Hubert