Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.294 Beiträge
 
Delphi 12 Athens
 
#5

AW: Windows Codepages - Kernel32.dll - EnumSystemCodePages

  Alt 22. Jun 2023, 15:12
Zitat:
class function GetEntry(Index:integer) : String; static;
jupp, genau so ... dieses "static".

Eine Funktion oder Class-Function in einer Klasse oder Record besitzen einen impliziten/unsichtbaren Parameter "Self". (der steht immer als Erstes in der Parameterliste)
Eine statische Class-Function besitzt dieses Self nicht.
Auch diese eingebetteten Methoden besitzen "normalerweise" so eine versteckte Variable (hier der StackPointer auf den Speicherberech der übergeordneten Funktion, mit dessen Self, dessen Parametern und den lokalen Variablen ... nur von Denen vor der eingebetteten Methode)

Funktion : Self = der Instanzzeiger
Class-Function: Self = der "aktuelle" Klassentyp -> von der Instanz aus der Variable (Variable.MyFunction) oder der benutzte Klassenname (TMyClass.MyFunction)
static Class-Function: besitzen kein Self und gehen immer "hart" auf den Typ der zugehörigen Klasse

Drum muß man auch aufpassen, ob man Class-Functions über eine Variable oder über den Typ aufruft.
Denn mit NIL oder schlimmer einem ungültigen Instanzzeiger, würde versucht daraus den "aktuellen" ClassTyp für das "Self" auszulesen, was dann wunderschön knallt.

PS:
Class-Funktions in Records müssen leider immer static sein (k.A. warum der Compiler das nicht implizit macht, selbst wenn man es nicht explizit angibt )
MethodenZeigern (z.B. TNotifyEvent) kann man sowohl normale Methoden zuweisen, als auch KlassenMethoden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Jun 2023 um 15:15 Uhr)
  Mit Zitat antworten Zitat