Delphi-PRAXiS

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 10: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 12: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 12: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 12: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 12: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 12: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 13: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 14: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 14: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 14: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:

himitsu 5. Dez 2007 14:47

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

Zitat von OlafSt
Bei mir entsteht sowas durch einen Bug in Delphi.

Wo ist da ein Bug?

Weglassen kann man Vieles, nur nicht Verwendets in falscher Reinfolge nutzen.

Oracle 5. Dez 2007 15:21

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
Strg+j kannte ich noch nicht. Das ist auch super. Shift+Strg+i bzw +u war mir auch neu. Das geht bei mir dank Castalia aber auch über Tabulator bzw. Shift+Tabulator

dominikkv 5. Dez 2007 16:04

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

Zitat von Oracle
Strg+j kannte ich noch nicht.

ich auch nicht :pale:
was bringt das?

sirius 5. Dez 2007 16:08

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

Zitat von dominikkv
Zitat:

Zitat von Oracle
Strg+j kannte ich noch nicht.

ich auch nicht :pale:
was bringt das?

Bevor hier noch mehr ein Wunder erleben :mrgreen:

jottkaerr 6. Dez 2007 07:04

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
Hallo,

Zitat:

Zitat von himitsu
Zitat:

Zitat von OlafSt
Bei mir entsteht sowas durch einen Bug in Delphi.

Wo ist da ein Bug?

Weglassen kann man Vieles, nur nicht Verwendets in falscher Reinfolge nutzen.

wenn man ein Nur-Schreiben-Property hat

Delphi-Quellcode:
type
  TNurSchreiben = class(TObject)
  private
    procedure SetProp(const Value: Integer);
  public
    property Prop: Integer write SetProp;
  end;
ergänzt Delphi dies blödsinnigerweise beim nächsten Drücken von Strg-Umsch-C mit einer read-Angabe -- aber wenigstens an der falschen Stelle, so dass man beim nächsten Compilieren darauf hingewiesen wird.

jkr

himitsu 7. Dez 2007 17:38

Re: Read- und Write-Deklaration bei Klasseneigenschaften
 
was ... Delphi fügt hier einfach was ein :shock:
ok, dat würde ich och als Bug ansehn :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.

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