Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Delphi <> Java : static class

  Alt 11. Jul 2007, 18:14
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 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
  Mit Zitat antworten Zitat