AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

property...read..write

Ein Thema von Haegar · begonnen am 20. Feb 2003 · letzter Beitrag vom 21. Feb 2003
Antwort Antwort
Seite 1 von 2  1 2   
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#1

property...read..write

  Alt 20. Feb 2003, 20:28
also irgendwie hab ich hier nen beispiel aus nem buch, aber ich komm noch nicht ganz dahinter!
hier der wichtige Teil des quelltextes
Delphi-Quellcode:
interface
 type TAuto=class(TObject)
  private
   bj:integer;
   function liesAlter: integer;
   procedure schreibAlter(a:integer);
  public
   constructor erzeugen(xpos,ypos:integer; color:longint, baujahr:integer);
   property Alter:integer read liesAlter write schreibAlter;
 end;

implementation

function TAuto.liesAlter:integer;
begin
 result:=StrToInt(FormatDateTime('yyyy',Date))-bj;
end;

procedure TAuto.schreibAlter(a:integer);
begin
 bj:=StrToInt(FormatDateTime('yyyy',Date))-a;
end;

constructor tAuto.erzeugen(xpos,ypos:integer;color:longint; baujahr:integer);
begin
 x:=xpos;
 y:=ypos;
 farbe:=color;
 bj:=baujahr;
end;
also unklar ist mir nur das mit der Variablen "bj" (Baujahr)!
mein gedanke dazu!
-baujahr wird duchr constructor übergeben!
-danach mit function liesAlter das Alter
ermittelt (differenz: aktuell-bj)


und was hat das jetzt mit der Prozedur auf sich?
warum wird da nochmal bj bestimmt, bzw. was hat es mit der variable a auf sich???
kann mir wer helfen(ohne verbesserungsvorschläge, nur was da passiert)


danke haegar
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#2
  Alt 20. Feb 2003, 21:14
Das passt alles!

Beim Erzeugen eines Objektes TAuto muss man Übergabeparameter mitgeben, da dies der Constructor so vorsieht. Damit ist bj (nicht über eine Property) in jedem Fall gesetzt.

'Liesalter' wird hier nie aufgerufen. Nur wenn sie es wird(ein Button 'Alter anzeigen' z.b könnte dies anstossen), wird über diese Funktion anhand des Baujahrs das richtige Alter berechnet.

Bei 'schreibAlter' ist a ein Übergabeparameter der wohl das Alter des Autos meint. Diese Procedure setzt anhand des neuen Alters auch ein neues Baujahr!


PS: Ein sehr schönes Beispiel muss ich sagen!
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#3
  Alt 20. Feb 2003, 21:28
ja da fällt mir noch was ein, mal gucken ob ich das dann verstanden hab!
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender:TObject);
 begin
  Label1.caption:='Alter: '+IntToStr(Alter);
 end;
so ist der zugriff auf alter in dem beispiel gesteuert!
heisst das, das procedure schreibAlter(a:integer); gar nicht aufgerufen/benutzt wird!? ist die dazu da, das ich per altersangabe (entspricht dann a?) das baujahr ermittle?
dann wär das ja in dem programm qausi überflüssig, aber warum greifen sie es dann mit auf? naja wenn das nu stimmen sollte wie ich mir das denke, soll mir das egal sein

ciao haegar
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#4
  Alt 20. Feb 2003, 21:46
Du musst es anders sehen.

Wenn man das Alter eines Autos ändert, wird automatisch das Baujahr angepasst(was absolut sinnig ist!). Das ist im wesentlichen Sinn und Zweck des Codes!

Kleine Anmerkung noch: bj ist privat deklariert, du kannst also innerhalb dieser Unit darauf zugreifen. Von anderen Units muss man es über die Property machen! Da stecken ne Menge Möglichkeiten drin. Z.B lässt man eine Write-Property weg und man hat einen Read only Parameter.
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#5
  Alt 20. Feb 2003, 21:50
aber in meinem beispiel ist die write-geschichte auch nicht von nöten, oder? denn es wird nirgends eine ALTERSANGABE gemacht! es wird lediglich bei FormCreate das Baujahr angegeben! und da tritt ja die function in kraft


wenn ich beispielsweise die write-property nutzen wollen würde, dann müsste ich das folgendermaßen machen!?

Auto.Alter:=10; würde dann ein durch eine Jahresangabe bei Formcreate erzeugter alterswert überschrieben werden, wenn ich das so später aufrufe??
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#6
  Alt 20. Feb 2003, 21:57
Beim Create füllst du 'bj' direkt nicht über die Porperty!

Innerhalb dieser Unit wird keine eigene Funktion oder Prozedure aufgerufen, dies könnten andere Units übernehmen z.B.

Ich würde es aber eher als Beispiel sehen.
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#7
  Alt 20. Feb 2003, 22:00
ääähh....aha...naja ich mach mich erstml ins bett, hab ja schließlich schule. und dann kann ich mir das morgen in aller ruhe nochmal alles duchdenken.

danke ciao haegar
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#8
  Alt 20. Feb 2003, 22:01
Innerhalb dieser Unit ist alles möglich, auch die direkte Änderung von Baujahr.

Mach dir ne 2. Unit und versuch mal da direkt Baujahr zu ändern ohne Propertys
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#9
  Alt 20. Feb 2003, 22:05
gut dann hatte ich halt nochwas verheimlicht
diese ganze TAuto=class(TObject)-Geschichte ist eine eigene unit
mit all den private und public prozeduren und funktionen!
die unit1 (Form1) die macht dann die ganze ansteurerung!
und dann nochmal die frage wegen

auto.alter:=10; (in unit1 enthalten)
würde das dann die write-property benutzen, oder wie mache ich das?
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#10
  Alt 20. Feb 2003, 22:18
auto.alter:=10;

würde die write property ansprechen und die dahinter liegende Funktion oder Procedure ausführen.

Allerdings hab ich jetzt bedenken wegen der Syntax, ich denke mal eben eher so (hab zur Zeit zuhause kein Delphi installiert):

auto.alter(10);

Der Compiler wird es dir schon sagen
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf