Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Syntax - Eckige Klammern bei Klasseninstanzen (https://www.delphipraxis.net/143075-delphi-syntax-eckige-klammern-bei-klasseninstanzen.html)

Aphton 9. Nov 2009 12:00


Delphi Syntax - Eckige Klammern bei Klasseninstanzen
 
Hallo liebe Leute,
Ich habe heute in der Schule 'ne Aufgabe zu Datenbanken bekommen.
Die Aufgaben werden Anhand von Beispielen durchprogrammiert.
In einem dieser Beispiele hab ich diesen Codefetzen gefunden und wunder mich über die Syntax:

Delphi-Quellcode:
  Table2['Datum'] := Date;
- was haben die "[]" bei einer Instanz zu suchen?
- wie funktionieren sie?
- wie kann ich soetwas selber programmieren (hab mir die Klasse genauer angesehen, aber nichts gefunden bzw. ich bin nicht alle Mutterklassen durchgegangen)

Bai de wey - ich habe mich schon um die Suche bemüht, jedoch nichts brauchbares gefunden.

Bedanke mich schonmal im voraus

MfG,
Euer Aphi ^^

DP-Maintenance 9. Nov 2009 12:02

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Da isses besser aufgehoben.

Bernhard Geyer 9. Nov 2009 12:05

Re: Delphi Syntax - Eckige Klammern bei Klasseninstanzen
 
Dies ist dann mögich enn die Klassen ein Array-Property als Default-Wert hat. Dann kann diese abgekürzte Schreibweise verwendet werden. Ist auch bei TStrings der Fall da hier das Items-Property default ist.
Delphi-Quellcode:
myStrings.Itemes[i] = myStrings[i];

Phoenix 9. Nov 2009 12:06

Re: Delphi Syntax - Eckige Klammern bei Klasseninstanzen
 
Hallo, dass ist ein sogenanntes Index-Property.
Delphi-Quellcode:
Property Wrdlbrmpft[Index: String] : Type read getWrdlbrmpft write setWrdlbrmpft;

function TMyTYpe.getWrdlbrmpft(Index: String): Type;
begin
  // hole item mit Namen in 'Index' und gebe es zurück
end;


procedure TMyType.setWrdlbrmpft(Index: String, Value: Type);
begin
  // schreibe wert in Value in Item mit Namen in 'Index';
end
Ein anderes Beispiel findest Du hier: http://www.delphibasics.co.uk/RTL.asp?Name=Property

Neutral General 9. Nov 2009 12:07

Re: Delphi Syntax - Eckige Klammern bei Klasseninstanzen
 
Hi,

Delphi-Quellcode:
// Imaginäres Beispiel
TBeispiel = class
private
  FFields: TFieldList;
  procedure SetField(Index: String, const Value: TField);
  function GetField(Index: String): TField;
public
  property Fields[Index: String]: TField read GetField write SetField; default;
end;

implementation

procedure TBeispiel.SetField(Index: String, const Value: TField);
begin
  FFields.GetFieldByName(Index) := Value;
end;

function TBeispiel.GetField(Index: String): TField;
begin
  Result := FFields.GetFieldByName(Index);
end;
Delphi-Quellcode:
var test: TBeispiel;
begin
  test.Fields['Hallo'] := blubb;
  // Abkürzende schreibweise für die Zeile
  // obendrüber:
  test['Hallo'] := blubb;  // Kann man so schreiben wegen dem "default" keyword von der Fields Property
end;

Aphton 9. Nov 2009 12:23

Re: Delphi Syntax - Eckige Klammern bei Klasseninstanzen
 
Verstehe...
Nun stellt sich mir die Frage, was passiert, wenn ich nun zwei Property Felder mit gleichem Index-Typ habe? Wird dann willkürlich eine Property ausgewählt, bzw. funktioniert das dann noch?

Edit: Ich probiers mal aus :P

MfG

mleyen 9. Nov 2009 12:25

Re: Delphi Syntax - Eckige Klammern bei Klasseninstanzen
 
Nein, denn man kann ja immer nur eine Property als Default markieren.

DeddyH 9. Nov 2009 12:26

Re: Delphi Syntax - Eckige Klammern bei Klasseninstanzen
 
Du kannst ja nur eine davon als Standard definieren (bzw. es wird nur eine akzeptiert). Die andere kann aber immer noch über die lange Schreibweise angesprochen werden.

Aphton 9. Nov 2009 12:28

Re: Delphi Syntax - Eckige Klammern bei Klasseninstanzen
 
Zitat:

Zitat von mleyen
Nein, denn man kann ja immer nur eine Property als Default markieren.

Ok, alles klar.

Vielen dank :dp:

MfG

himitsu 9. Nov 2009 12:36

Re: Delphi Syntax - Eckige Klammern bei Klasseninstanzen
 
Man kann auch 2 Array-Property als Default festlegen,
wenn diese via Overload markiert sind.

Dann wird es, wie bei Prozeduren/Funktionen, anhand der Parameter entschieden.

Aber sowas ist erst seit D2007 oder D2009 nutzbar.


PS: das DEFAULT bei Array-Propertyies ist nicht zu verwechseln mit dem DEFAULT der "normalen" ordinalen Property!


Wird in himXML erfolgreich so genutzt :angel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 Uhr.

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