Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Klassen / Property / Funktionen (https://www.delphipraxis.net/115372-problem-mit-klassen-property-funktionen.html)

S20000 11. Jun 2008 10:30


Problem mit Klassen / Property / Funktionen
 
Hallo zusammen,

ich bin gerade dabei ein Programm zu schreiben welchen
verschiedene Klassen erhalten soll.

Ich komme zur Zeit durcheinander mit Properties und Funktionen.
Ich weiß das das unten angegebene Beispiel nicht lauffähig ist,
ich hoffe jedoch daraus wird mein Problem ersichtlich.

Ich möchte aus einem anderen Formular die Klasse TTest.Status aufrufen,
und abhängig vom übergebenen Wert "true" oder "false" erhalten.



Delphi-Quellcode:
interface
...

TTest=class(TObject)
    private
    function GetStatus(ID:pchar):boolean;
    public
    property Status:boolean read GetStatus(ID:pchar);
  end;

implementation
...


function TTest.GetStatus(ID:pchar): boolean;
begin
if ID=4711 then
result := true;
end;
Gruß
Sebastian

DeddyH 11. Jun 2008 10:35

Re: Problem mit Klassen / Property / Funktionen
 
[edit] Sry, war Blödsinn [/edit]

littleDave 11. Jun 2008 10:37

Re: Problem mit Klassen / Property / Funktionen
 
Wenn du wissen willst, wie du das mit den Parametern in Properties machen sollst:
Delphi-Quellcode:
type
  TTest = class(TObject)
  private
    // von PChar auf integer geändert
    function GetStatus(ID: integer): boolean;
  public
    // [index] eingefügt und read-Anweisung verändert
    property Status[index: integer]: boolean read GetStatus;
  end;

S20000 11. Jun 2008 10:43

Re: Problem mit Klassen / Property / Funktionen
 
Das funktioniert aber nicht mehr wenn ich mehrere Parameter
übergeben möchte?!

shmia 11. Jun 2008 10:43

Re: Problem mit Klassen / Property / Funktionen
 
Delphi-Quellcode:
TTest=class(TObject)
    private
    function GetStatus(const ID:string):boolean;
    public
    property Status[const ID:string]:boolean read GetStatus(const ID:string);
  end;

implementation
...


function TTest.GetStatus(const ID:string): boolean;
begin
if ID='4711' then
   result := true
else  // bloss nicht das else vergessen
   result := False;
(*
   // eine kompakte Abfrage für mehrere Strings
   result := StrIndex(IdLand,['4711','4712', 'Test', 'Delphi']) <> -1;
*)
end;

littleDave 11. Jun 2008 10:50

Re: Problem mit Klassen / Property / Funktionen
 
Mehrere Parameter sind auch kein Problem:
Delphi-Quellcode:
type
  TTest = class(TObject)
  private
    // von PChar auf integer geändert
    function GetStatus(ID, Number, Test, Super: integer): boolean;
  public
    // [index] eingefügt und read-Anweisung verändert
    property Status[ID, Number, Test, Super: integer]: boolean read GetStatus;
  end;
Was du in den Properties aber nicht machen kannst: du kannst keine overloaded Parameter erstellen.

S20000 11. Jun 2008 10:56

Re: Problem mit Klassen / Property / Funktionen
 
Vielen Dank!

overloaded Parameter sagen mir jedoch noch nichts.
Overload kenne ich nur, wenn ich in einer abgeleiteten Klasse
eine Methode überschreiben will.

mkinzler 11. Jun 2008 10:59

Re: Problem mit Klassen / Property / Funktionen
 
Das wäre override. Overload bedeutet eine Methode mit dem selben Namen und anderer Signatur

littleDave 11. Jun 2008 11:11

Re: Problem mit Klassen / Property / Funktionen
 
Ich versuchs dir anhand eines Beispiels zu erklären:
Bei procedures und functions gibt es eine Anweisung overload. Mit dieser Anweisung kannst du den selben Funktionsnamen mit unterschiedlichen Parametern mehrmals verwenden. Beispiel:
Delphi-Quellcode:
function GetItem(index: integer): TItem; overload;
function GetItem(Name: string): TItem; overload;
function GetItem(Child: TItem): TItem; overload;
Wenn du jetzt die Funktion GetItem aufrufst, entscheidet der Compiler anhand der Parameter, welche Funktion ausgeführt wird:
GetItem(1) -> die erste Funktion wird ausgeführt
GetItem('abc') -> die zweite Funktion wird ausgeführt
GetItem(aItem) -> die dritte Funktion wird ausgeführt (aItem ist vom Typ TItem)

Was jetzt aber nicht geht:
Delphi-Quellcode:
type
  TTest = class
  private
    function GetStatusI(id: integer): boolean;
    function GetStatusS(s: string): boolean;
  public
    // das funktioniert nicht!!!!!
    property GetStatus[id: integer]: boolean read GetStatusI; overload;
    property GetStatus[s: string] : boolean read GetStatusS; overload;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 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