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/)
-   -   Delphi Simple Frage zu Funktionen (https://www.delphipraxis.net/104332-simple-frage-zu-funktionen.html)

.chicken 1. Dez 2007 20:30


Simple Frage zu Funktionen
 
Aehm mir is da grad was durchn Kopf gegangen und irgendwie war ich mir nichmehr sicher wie es denn nun richtig ist.

Mal angenommen ich habe eine Klasse TPlayer und eine Klasse TPlayerArray.
TPlayerArray enthaelt ein Array von TPlayer. Wenn ich nun in einer Funktion von TPlayerArray per ID als result einen der TPlayer im Array ausgebe, und den verändere, werden dann die Player im Array veraendert? Oder wird durch das Result eine neue Instanz dieses TPlayers erzeugt (was ich vermute).

Danke schonmal! :)

mkinzler 1. Dez 2007 20:34

Re: Simple Frage zu Funktionen
 
Kommt darauf an, wie du das machst.

DGL-luke 1. Dez 2007 20:35

Re: Simple Frage zu Funktionen
 
Kommt ein bisschen drauf an, wie du das baust.

Delphi-Quellcode:
type
  TPlayer = record
    Key: Integer;
  end;

  TPlayerArray = class
  private
    FPlayers = array of Players;
  public
    function GetPlayer(Id: Integer): TPlayer;
  end;

implementation

function TPlayerArray,GetPlayer(Id: Integer): TPlayer;
begin
  Result := FPlayers[Id];
end;
In dem Fall sollte kopiert werden.

cruiser 1. Dez 2007 20:35

Re: Simple Frage zu Funktionen
 
Wenn TPlayer eine Klasse ist und in einem TPlayerArray Instanzen dieser Klasse liegen, dann speichert das Array nur die Pointer auf den Adressraum der jeweiligen Instanz. Soll heissen, du gibst nur die Kopie des Pointers weiter, der aber zum originalen Adressraum zeigt. Es wird also auch die Instanz im Array geändert, weil es ja die selbe Instanz ist, auf die der kopierte Pointer zeigt.

Anders ist das bei Records. Wenn du da nicht explizit die Pointer zu den Records ablegst kopierst du die Records samt Daten anstelle der Pointer.

.chicken 1. Dez 2007 20:56

Re: Simple Frage zu Funktionen
 
Delphi-Quellcode:
type
  TPlayer = class
  private
  public
    name: string;
  end;

  TPlayerArray = class
  private
    FPlayers = array of Players;
  public
    function GetPlayer(Id: Integer): TPlayer;
  end;

implementation

function TPlayerArray,GetPlayer(Id: Integer): TPlayer;
begin
  Result := FPlayers[Id];
end;
Also wenn ich das so aufbaue und dann folgendes aufrufe:
Delphi-Quellcode:
GetPlayer(5).name := 'Hans Meyer';
Dann wird der Name des Players mit der ID 5 in 'Hans Meyer' geändert?

mkinzler 1. Dez 2007 20:59

Re: Simple Frage zu Funktionen
 
Ja, weil ja eine Referenz(Zeiger) zurückgegeben wird

.chicken 1. Dez 2007 21:25

Re: Simple Frage zu Funktionen
 
Super, danke :)

Luckie 1. Dez 2007 22:09

Re: Simple Frage zu Funktionen
 
Warum machst du nur den halben Schritt? Anstatt des Arrays würde ich eine typisierte Liste nehmen: Container-Klassen in Delphi

.chicken 1. Dez 2007 23:21

Re: Simple Frage zu Funktionen
 
Seh ich mir morgen an, danke ;-) Bin gespannt was das is, aber jetzt muss ihc pennen, muss morgen relativ früh raus :) Danke für die Info!

.chicken 5. Dez 2007 20:54

Re: Simple Frage zu Funktionen
 
So, habs mir angesehn. Letztendlich mache ich es glaube ich so, dass ich mir die Funktionen die ich von der Liste bräuchte selbst schreibe und dann halt ein Array benutze. Komme damit ganz gut klar, und da das ganze nicht zu umfangreich ist geht das glaube ich so auch ganz gut, oder warum sollte ich umsteigen?

Aber eine Frage habe ich. Wenn ich nun das PlayerArray habe und eine Instanz davon erstelle
Delphi-Quellcode:
PlayerArray := TPlayerArray.create;
Dann möchte ich die Möglichkeit haben mit
Delphi-Quellcode:
PlayerArray[i] := xx;
Auf die ArrayEinträge zugreifen zu können, ohne immer folgendes machen zu müssen
Delphi-Quellcode:
PlayerArray.Player[i] := xx;
//oder
PlayerArray.ByIndex(i) := xx;
Wie realisiere ich das? Hoffe ihr versteht was ich meine?


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