![]() |
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! :) |
Re: Simple Frage zu Funktionen
Kommt darauf an, wie du das machst.
|
Re: Simple Frage zu Funktionen
Kommt ein bisschen drauf an, wie du das baust.
Delphi-Quellcode:
In dem Fall sollte kopiert werden.
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; |
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. |
Re: Simple Frage zu Funktionen
Delphi-Quellcode:
Also wenn ich das so aufbaue und dann folgendes aufrufe:
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;
Delphi-Quellcode:
Dann wird der Name des Players mit der ID 5 in 'Hans Meyer' geändert?
GetPlayer(5).name := 'Hans Meyer';
|
Re: Simple Frage zu Funktionen
Ja, weil ja eine Referenz(Zeiger) zurückgegeben wird
|
Re: Simple Frage zu Funktionen
Super, danke :)
|
Re: Simple Frage zu Funktionen
Warum machst du nur den halben Schritt? Anstatt des Arrays würde ich eine typisierte Liste nehmen:
![]() |
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!
|
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:
Dann möchte ich die Möglichkeit haben mit
PlayerArray := TPlayerArray.create;
Delphi-Quellcode:
Auf die ArrayEinträge zugreifen zu können, ohne immer folgendes machen zu müssen
PlayerArray[i] := xx;
Delphi-Quellcode:
Wie realisiere ich das? Hoffe ihr versteht was ich meine?
PlayerArray.Player[i] := xx;
//oder PlayerArray.ByIndex(i) := xx; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 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-2025 by Thomas Breitkreuz