Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klasse mit vordefinierter Variable? (https://www.delphipraxis.net/74883-klasse-mit-vordefinierter-variable.html)

moelski 10. Aug 2006 07:24


Klasse mit vordefinierter Variable?
 
Moin !

Ich baue gerade den Inhalt einer Unit in eine Klasse um. Folgende Deklaration:
Delphi-Quellcode:
type
  TLVSpectraII = class(TObject)
    public
      function 1.....;
      function 2.....;
    private
      EnergieSumme:    Double;      // 1
      _LastZellenzahl : Byte = 0;    // 2
  end;
Die Deklaration der Variable (1) geht ja ohne Probleme. Aber die bei (2) nicht.
Kann mir jemand sagen wie ich das am besten machen kann?

RavenIV 10. Aug 2006 07:27

Re: Klasse mit vordefinierter Variable?
 
zu (2):
das geht so nicht. Kannst aber im Constructor (MyClass.Create) den Wert zuweisen.

sh17 10. Aug 2006 07:40

Re: Klasse mit vordefinierter Variable?
 
mit properties kann man das per default-wert machen, geht dann IMO nicht private

Delphi-Quellcode:
  TLVSpectraII = class(TObject)
  private
    F_LastZellenzahl: Byte;
    procedure Set_LastZellenzahl(const Value: Byte);
  published
    property _LastZellenzahl : Byte read F_LastZellenzahl write Set_LastZellenzahl default 0;
  end;
oder kleiner

Delphi-Quellcode:
  TLVSpectraII = class(TObject)
  private
    F_LastZellenzahl: Byte;
  published
    property _LastZellenzahl : Byte read F_LastZellenzahl write F_LastZellenzahl default 0;
  end;

H4ndy 10. Aug 2006 07:43

Re: Klasse mit vordefinierter Variable?
 
Du könntest auch einfach über der Klassendeklaration dir noch zusätzliche Konstanten deklarieren.
Delphi-Quellcode:
const
  _LastZellenzahl: Byte = 0;

type
  TLVSpectraII = class(TObject)
    public
      function 1.....;
      function 2.....;
    private
      EnergieSumme:    Double;      // 1
      //_LastZellenzahl : Byte = 0;    // 2
  end;

moelski 10. Aug 2006 07:48

Re: Klasse mit vordefinierter Variable?
 
Moin !

Ich habe es jetzt mal so probiert:
Delphi-Quellcode:
type
  TLVSpectraII = class(TObject)
    public
      constructor Create(Owner: TObject); override;

      function 1....;
    private
      EnergieSumme:    Double;      // 
      _LastZellenzahl : Byte;        // 
  end;
Delphi-Quellcode:
constructor TLVSpectraII.Create(Owner: TObject);
begin
  inherited Create(Owner);    // Geerbten Konstruktor aufrufen.
  _LastZellenzahl := 0;       // Variablen vor erster benutzung setzen
  _LastZyklus    := 0;
  _LastStatus    := 0;
  _LastTimeTicker := 0;
end;
Da kriege ich aber den Fehler "Eine statische Methode kann nicht überschrieben werden".

Lasse ich Override weg, dann kriege ich in constructor TLVSpectraII.Create... folgende Meldung "Zu viele Parameter".

Hmm, was ist hier nun falsch?

@H4ndy:
Könnte man machen. Aber was ist wenn ich ein neues Objekt über TLVSpectraII.Create erzeuge. Werden die Constanten dann auch neu angelegt?

3_of_8 10. Aug 2006 07:50

Re: Klasse mit vordefinierter Variable?
 
Der default Wert bei den Propertys ist KEIN Vorgabewert, der automatisch zugewiesen wird.

Der default Wert sagt nur dem Formulardesigner, bei welchem Wert er nichts in die Formularressource schreiben muss, weil es sowieso auf dem Vorgabewert ist.

sh17 10. Aug 2006 07:52

Re: Klasse mit vordefinierter Variable?
 
Zitat:

Zitat von 3_of_8
Der default Wert bei den Propertys ist KEIN Vorgabewert, der automatisch zugewiesen wird.

Der default Wert sagt nur dem Formulardesigner, bei welchem Wert er nichts in die Formularressource schreiben muss, weil es sowieso auf dem Vorgabewert ist.


jetzt wo dus sagst. das kommt davon, wenn man dinge vorschlägt, die man selbst nicht nutzt.

sh17 10. Aug 2006 07:55

Re: Klasse mit vordefinierter Variable?
 
Zitat:

Zitat von moelski
Hmm, was ist hier nun falsch?

lass override weg und im Create nur

inherited Create;

moelski 10. Aug 2006 07:57

Re: Klasse mit vordefinierter Variable?
 
Moin !

@sh17:
Also kann ich doch im Create meine Variablen setzen?


Wie ist es mit dem
Delphi-Quellcode:
 const
  _LastZellenzahl: Byte = 0;

type
  TLVSpectraII = class(TObject)
  .......
Wird das pro Objekt angelegt?

H4ndy 10. Aug 2006 07:59

Re: Klasse mit vordefinierter Variable?
 
Zitat:

Zitat von moelski
@H4ndy:
Könnte man machen. Aber was ist wenn ich ein neues Objekt über TLVSpectraII.Create erzeuge. Werden die Constanten dann auch neu angelegt?

Also eigentlich dürfte das immer im Kontext der Unit arbeiten,
in der du die Klasse deklariert hast. Da du ja zur Zugriff
auf die Konstante innerhalb der Klassen-Methoden brauchst,
sehe ich darin kein Problem das so zu machen.

Zitat:

Zitat von moelski
Da kriege ich aber den Fehler "Eine statische Methode kann nicht überschrieben werden".
Lasse ich Override weg, dann kriege ich in constructor TLVSpectraII.Create... folgende Meldung "Zu viele Parameter".

Von TObject abgeleitet Klassen haben keinen Owner-Parameter.

Delphi-Quellcode:
TLVSpectraII = class(TObject)
    public
      constructor Create;

      function 1....;
    private
      EnergieSumme:    Double;      //
      _LastZellenzahl : Byte;        // 
  end;

constructor TLVSpectraII.Create;
begin
  inherited Create;    // Geerbten Konstruktor aufrufen.
  _LastZellenzahl := 0;       // Variablen vor erster benutzung setzen
  _LastZyklus    := 0;
  _LastStatus    := 0;
  _LastTimeTicker := 0;
end;
(Im Gegensatz zum Create musst du Destroy immer überschreiben, aber auch da das "inherited Destroy;" nicht vergessen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr.
Seite 1 von 2  1 2      

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