Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Read- und Write-Deklaration bei Klasseneigenschaften (https://www.delphipraxis.net/104489-read-und-write-deklaration-bei-klasseneigenschaften.html)

Daniel 5. Dez 2007 09:19


Read- und Write-Deklaration bei Klasseneigenschaften
 
Moinsen,

sagt mal ... ich sitze vor dem PC und starre auf den Code und frage mich, was da passiert ist. (Zugegeben, das passiert öfters, aber heute fühle ich mich eigentlich frisch und fit).

Seit wann ist denn bei Eigenschaften von Klassen die Reihenfolge wichtig, in der ich die Deklarationen von read und write angebe? Ich hätte schwören können, dass dieser Code einst kompilierte. Heute aber nicht mehr:

Delphi-Quellcode:
TMiep = class(TObject)
  private
    fData1 : integer;
    fData2 : integer;
  published
    property Data1 : integer read fData1 write fData1; // <--- geht
    property Data2 : integer write fData2 read fData2; // <--- geht nicht so richtig gut
  end;
Habe ich da was verpasst oder war das schon immer so? Aktuell habe ich leider kein altes Delphi zur Hand, um dies selbst zu testen.

Daniel 5. Dez 2007 11:31

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
Zwischenzeitlich habe ich TurboDelphi installiert und oben stehender Code war auch mit Delphi 2006 nicht zu übersetzen.
Mein Fehler. ;-)
Obwohl ich mir nocht erklären kann, wie diese Programmzeile in meine Anwendung kommen konnte.

Luckie 5. Dez 2007 11:34

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
Das war schon immer so. Aber frag mich nicht, warum das so ist.

himitsu 5. Dez 2007 11:35

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
sooo, jetzt darf ich auch endlich mal senden

hab zwar bisher immer erst READ und dann WRITE geschrieben, aber grad getestet ... D4 und D7 meckert auch


Zitat:

Zitat von D7 : Zeile 22 = property Data2
[Fehler] Unit1.pas(22): ';' erwartet, aber Bezeichner 'read' gefunden
[Fehler] Unit1.pas(22): ',' oder ':' erwartet, aber ';' gefunden
[Fehler] Unit1.pas(23): Typ erwartet, aber 'END' gefunden
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden


Popov 5. Dez 2007 11:49

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
Was ist daran nicht zu verstehen? Die Reihenfolge ist

Delphi-Quellcode:
property read write {basta}
Das ist die Reihenfolge. Du schreibst auch nicht

Delphi-Quellcode:
function a2b: String (x, y: Integer);
Oder besser wird es hier sichtbar

Delphi-Quellcode:
for x := 1 do 10 to
Es ist eine Reihenfolge. Wieso sie so streng gehandhabt wird, obwohl es keinen richtigen Grund gibt, weiß ich nicht, wird aber anscheinend :-D

//Edit: Shi.., wenn man schon blöde quatscht wie ich, dann sollte man nicht Unsinn reden. Jetzt hab ich mich doch selbst bei der Reihenfolge vertan. Hab ober read und write getauscht.

himitsu 5. Dez 2007 11:57

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
das es 'ne feste Reinfolge gibt wurde ja schon festgestlellt ^^
es hatten nur Einige die feste Reinfolge noch nicht mitbekommen oder es einfach vergessen :stupid:


aber andersrum wäre doch auch logisch gewesen?
man muß zuerst was reinschreiben und kann danach erst lesen
und Default kommt vor allem (also default>write>read) :zwinker:

OlafSt 5. Dez 2007 12:46

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
Bei mir entsteht sowas durch einen Bug in Delphi.

nehmen wir folgende Klasse:
Delphi-Quellcode:
type
TTest=class(TObject)
private
  Fbla: boolean;
protected
public
  property bla: boolean write Fbla;
end;
Eine Klasse mit einem Write-only-property und nichts wirklich ungewöhnliches...

Nun der Klasse eine neue Methode hinzufügen:
Delphi-Quellcode:
private
  procedure TestMe;
und dann Shift-Ctrl-C zur Codervervollständigung drücken. Delphi erzeugt im Implementation-Teil dann einen Prozedurrumpf:
Delphi-Quellcode:
procedure Test.TestMe;
begin

end;
und außerdem wird das property dort oben mit einem READ-Teil versehen, der dort aber weder hingehört noch richtig plaziert ist.

Sergej 5. Dez 2007 13:17

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
Zitat:

Zitat von Popov
Was ist daran nicht zu verstehen? Die Reihenfolge ist

Delphi-Quellcode:
property write read {basta}

Nicht nur schon bekannte Tatsachen zitiert, nein auch noch falsch... ;-)

Delphi-Quellcode:
property read write

Oracle 5. Dez 2007 13:22

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
Super!!! :thumb: Gehört zwar nicht zum Thema, aber Shift-Ctrl-C kannte ich noch gar nicht. Aber sowas hab ich schon lange gesucht :)
Hast noch mehr davon auf Lager? :-D

Popov 5. Dez 2007 13:35

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
Zitat:

Zitat von Oracle
Super!!! :thumb: Gehört zwar nicht zum Thema, aber Shift-Ctrl-C kannte ich noch gar nicht. Aber sowas hab ich schon lange gesucht :)
Hast noch mehr davon auf Lager? :-D

Strg+Leertaste und Strg+j kennst du wahrscheinlich.

Wie wäre es mit Block markieren und mit Shift+Ctrl+i alles nach recht und mit Shift+Ctrl+u nach links bewegen.

@Sergej

Ist mir schon selbst aufgefallen noch bevor ich dein Hinweis las. Ich hab es einfach von oben kopiert und das Falsche kopiert :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz