![]() |
Ist das eine Methode oder Prozedur?
Nur eine Verständnissfrage. Add ist eine Methode der Klasse. Spricht man bei Find auch von einer Methode? Schließlich ist sie Private. Theoretisch greift später niemand drauf zu, also eine Prozedur und keine Methode.
Delphi-Quellcode:
type
TKlasse = class(TObject) private procedure Find; public procedure Add; end; |
AW: Ist das eine Methode oder Prozedur?
Jede Prozedur oder Funktion, die in der Deklaration einer Klasse deklariert ist, ist eine Methode, egal mit welcher Sichtbarkeit sie deklariert wurde.
Der technische Unterschied ist, dass beim Aufruf einer Methode der Self-Pointer mitgegeben werden muss, sprich die Instanz der Klasse, in dessen Kontext die Methode aufgerufen wird. |
AW: Ist das eine Methode oder Prozedur?
Ok, danke dir. Ich habe auch immer von Methode gesprochen, wurde dann aber etwas unsicher.
|
AW: Ist das eine Methode oder Prozedur?
Jede procedure oder function, die als Teil einer Klasse deklariert ist wird per Konvention als Methode bezeichnet, die Sichtbarkeit spielt keine Rolle. Es gibt einen wesentlichen wenn auch versteckten Unterschied zwischen Methoden und eigenständigen procedure oder functions (gemeinhin als Routinen bezeichnet): Methoden haben einen versteckten zusätzlichen Parameter in dem bei einem Aufruf der Methode die Referenz (Zeiger) des Objektes übergeben wird für das die Methode arbeiten soll. Innerhalb des Kodes der Methode kann man explizit über den Bezeichner "self" auf diesen Parameter zugreifen und er wird auch intern verwendet, um auf Felder, properties oder andere Methoden des Objektes zuzugreifen. Wegen dieses Parameters kann man eine Methode nur für ein Objekt (Instanz einer Klasse) aufrufen, d. h. über die objectvariable.methode Syntax. Nur innerhalb des Kodes einer Methode kann man eine andere Methode der gleichen Klasse direkt aufrufen, weil der Compiler da automatisch self für die objectvariable verwendet.
Bei als "class procedure" oder "class function" deklarierten Methoden ist der self-Parameter übrigens eine Referenz auf die Klasse selbst; die Addresse der ziemlich komplexen in-memory Struktur, die der Compiler für jede Klasse erzeugt. Ein constructor ist im Prinzip auch nur eine class function, ein destructor dagegen eine (fast) normale Methode. Um die Verwirrung komplett zu machen: wenn eine class procedure/function mit dem "static" Keyword deklariert wird bekommt sie keinen self-Parameter, ist also was die Parameter angeht, äquivalent zu einer eigenständigen Routine. Sie im Rahmen einer Klasse zu deklarieren gibt einem aber die Möglichkeit, quasi einen eigenen Namespace innerhalb einer Unit zu schaffen, in dem man konzeptionell zusammengehörige Routinen bündeln kann. Du solltest dich mal von Vorne bis Hinten durch den ![]() |
AW: Ist das eine Methode oder Prozedur?
Welchen praktischen Unterschiedlich macht "static" oder nicht? Record-Klassenfunktionen müssen ja "static" sein, aber das hat mich bisher nicht gestört.
|
AW: Ist das eine Methode oder Prozedur?
Da Records leider keine Vererbung besitzen, macht dort der Self-Parameter bei einer Class-Function keinen Sinn.
Delphi hat das auch garnicht implementiert, und somit gibt es nur STATIC. Leider wird das dann nicht einfach als DEFAULT genommen und muß explizit angegeben werden. function -> mit Self = Objekt-Zeiger class function -> mit Self = ClassType class function static = kein Self (PS: das Self ist ein "unsichtbarer" impliziter Parameter an allen Klassen-Methoden) |
AW: Ist das eine Methode oder Prozedur?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 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