Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi <> Java : static class (https://www.delphipraxis.net/95666-delphi-java-static-class.html)

Hawkeye219 11. Jul 2007 18:14

Re: Delphi <> Java : static class
 
Hallo,

bei der Verwendung von Klassenvariablen und -konstanten muß beachtet werden, daß sich alle Instanzen eine Variable bzw. Konstante teilen:

Delphi-Quellcode:
type
  TTest = class (TObject)
  private class var
    FMyProp: Integer;
  public
    class property MyProp: Integer read FMyProp write FMyProp;
  end;

var
  T1, T2 : TTest;
begin
  T1.MyProp := 42;
  T2.MyProp := 0;
  ShowMessage (IntToStr(T1.MyProp)); // Ausgabe: '0'!
end;
Das von BomberBB gewünschte Verhalten läßt sich (in allen Delphi-Versionen) mit Objekttypen realisieren, die auch eine Vererbung ermöglichen:

Delphi-Quellcode:
type
  TString = object
  private
    FValue : string;
  public
    procedure ConvertFromInt (aNumber: Integer);
    property Value: string read FValue write FValue;
  end;

procedure TString.ConvertFromInt (aNumber: Integer);
begin
  Value := IntToStr(aNumber);
end;

var
  MyString : TString;
begin
  MyString.ConvertFromInt(42);
  ShowMessage (MyString.Value);
end;
Eine Warnung sei aber angebracht:

Zitat:

Zitat von Delphi-Hilfe
Objekttypen werden nur aus Gründen der Abwärtskompatibilität unterstützt. Ihre Verwendung unter Win32 ist nicht zu empfehlen. Vom Delphi .NET-Compiler werden sie nicht akzeptiert.

Man sollte also nicht darauf vertrauen, daß auch zukünftige Delphi-Versionen die Objekttypen unterstützen. Das BDS bietet einen Ersatz in Form der erweiterten Record-Typen (leider ohne Vererbung).

Gruß Hawkeye

jbg 11. Jul 2007 18:35

Re: Delphi <> Java : static class
 
Zitat:

Zitat von Hawkeye219
Das BDS bietet einen Ersatz in Form der erweiterten Record-Typen (leider ohne Vererbung).

Also wenn ich mich recht entsinne, kann man unter Delphi.NET von Record-Typen erben. Das hat mich nämlich schon geärgert, dass das Win32 "object" nun unter Delphi.NET als "record" bezeichnet wird. Warum konnte man nicht das "alte" object benutzen statt nun für "ValueType" das Schlüsselwort "record" zu benutzen. Ich glaube ich sollte ein neues Feature in meine DLangExtensions packen, dass unter .NET jedes "typename = object" durch "typename = record" ersetzt, womit man dann das "object" in .NET benutzen kann. :wall:

Bomberbb 12. Jul 2007 07:34

Re: Delphi <> Java : static class
 
@Hawkeye219

Danke, genau das hab ich gesucht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 Uhr.
Seite 2 von 2     12   

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