Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Kann man units irgendwie bundeln?

  Alt 13. Okt 2022, 11:18
Du hast eine Instanz-Methode gebaut und versuchst sie über die Klasse aufzurufen,
obwohl es dafür eine Variable/Instanz (mit Create vorher) benötigt.
Delphi-Quellcode:
V := AliasKlasse.Create;
V.HashFile('DummyString');
V.Free; // natürlich noch mit try-finally drumrum
Aber würdest du es als KlassenMethode oder statische Klassenmethode bauen, dann ginge es (wenn außerhalb der Methode, von der Klasse nichts Anderes verwendet wird),
wobei es da auch egal ist, ob Klasse oder Record.
Delphi-Quellcode:
type
  //Ttools = record
  Ttools = class
  public
    function HashFile1(FilePathName: string): string; // Self=Objectinstanz
    class function HashFile2(FilePathName: string): string; // Self=Klassentyp
    class function HashFile2(FilePathName: string): string; static; // hier ohne den sonst unsichtbaren impliziten Self-Parameter
  end;


Wer will, kann auch moch mit abstract, final und Co. an der Klasse rumspielen.

Früher hatte ich abstract benutzt, um im Compiler schon eine Meldung zu bekommen, bei Klassen die garnicht instantiiert werden sollen müssen ... inzwischen nehme ich sowieso record dafür.

weil siehe Note:
https://docwiki.embarcadero.com/RADS...i)#Class_Types
http://delphiprogrammingdiary.blogsp...lasses-in.html

Denn dem Record ist alles egal, ob Typ oder Variable.
Bei einer Klasse muß man, für eine Klassenmethode (ohne static), den Typ oder eine instantiierte Variable benutzen,
sonst knallt es, weil nicht der Typ der Variable, sondern der Typ in der Instanz benutzt wird.





Der Alias wäre hier auch nicht nötigt, denn kannst ja direkt TTools benutzen.

Und bei solchen AliasUnits ala #2 aufpassen, dass man z.B. Typen aus Parametern und Property nicht vergisst weiterzuleiten, sowie nötige Konstanten und bei Sets/Enums auch jeden einzelnen Wert.
$2B or not $2B

Geändert von himitsu (13. Okt 2022 um 11:37 Uhr)
  Mit Zitat antworten Zitat