AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigenschaft wird gesetzt ohne Wirkung

Ein Thema von xZise · begonnen am 25. Jan 2009 · letzter Beitrag vom 25. Jan 2009
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Eigenschaft wird gesetzt ohne Wirkung

  Alt 25. Jan 2009, 17:08
Hallo ihr,

ich möchte standardmäßig eine Eigenschaft auf einen bestimmten Wert gesetzt haben. Eigentlich sollte das doch so gehen:
Delphi-Quellcode:
type
  TReserveManagment = (rmOwner, rmProgressive, rmExact);
[...]
    property ReserveManagment : TReserveManagment read FReserveManagment write SetReserveManagment default rmExact;
Nun reicht das nicht, also wollte ich vorübergehend das einfach ins Create packen:
Delphi-Quellcode:
constructor TIntegerList.Create;
begin
  inherited;
  FCount := 0;
  SetReserveManagment(rmExact);
  ReserveManagment := rmExact;
end;
Aber beide Varianten haben keine Auswirkungen auf den Wert von FReserveManagment. Er ist weiterhin rmOwner, was im Nachinein Probleme bringt. Aber wenn man es nach dem Create von außen sozusagen setzt, funktioniert es wunderbar.

Zur Information: Er springt in beiden Aufrufen (einmal direkt, einmal indirekt @ property) nicht in die Methode SetReserveManagment.

Delphi-Quellcode:
procedure TIntegerList.SetReserveManagment(const Value: TReserveManagment);
begin
  FReserveManagment := Value;
  case Value of
    rmProgressive: SetLength(FIntegers, (FCount div RESERVE_DELTA + 1) * RESERVE_DELTA);
    rmExact: SetLength(FIntegers, FCount);
  end;
  FReservedLength := Length(FIntegers);
end;
Wie kann ich nun die Klasse dazu bringen, standardmäßig "rmExact" in FReserveManagment stehen zu haben (abgesehen davon oben die Werte der Enumeration zu tauschen, weil das kann es ja nicht sein... Das behebt nur die Symptome nicht das Problem). Selbst ein tauschen der Werte in der Enumeration hilft nicht.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Eigenschaft wird gesetzt ohne Wirkung

  Alt 25. Jan 2009, 17:13
Das default ist nur von Belang, wenn eine als Published deklarierte Eigenschaft mit einem TWriter in einen Stream geschrieben wird.
Kannst du mal im Konstruktor die CPU-Ansicht aufrufen und uns zeigen, was passiert?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Eigenschaft wird gesetzt ohne Wirkung

  Alt 25. Jan 2009, 17:14
Und wenn Du den Konstruktor dahingehend änderst, dass Du das private Feld belegst statt der Property?
Delphi-Quellcode:
constructor TIntegerList.Create;
begin
  inherited;
  FCount := 0;
  FReserveManagment := rmExact;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Eigenschaft wird gesetzt ohne Wirkung

  Alt 25. Jan 2009, 17:27
Zitat von Apollonius:
Das default ist nur von Belang, wenn eine als Published deklarierte Eigenschaft mit einem TWriter in einen Stream geschrieben wird.
Ah okay Auch wenn mir das ab "mit einem ..." nicht so viel sagt, danke für die Information.

Zitat von Apollonius:
Kannst du mal im Konstruktor die CPU-Ansicht aufrufen und uns zeigen, was passiert?
Was hättest du den da gerne? Also ich weiß jetzt nicht ob dir das was nützt:
Code:
uIntegerList.pas.163: inherited;
0046DDF6 33D2             xor edx,edx
0046DDF8 8BC6             mov eax,esi
0046DDFA E88D5CF9FF      call TObject.Create
uIntegerList.pas.164: FCount := 0;
0046DDFF 33C0             xor eax,eax
0046DE01 894608           mov [esi+$08],eax
uIntegerList.pas.165: FReserveManagment := rmExact;
0046DE04 6A00             push $00
0046DE06 8D4604           lea eax,[esi+$04]
0046DE09 B901000000       mov ecx,$00000001
0046DE0E 8B1520DD4600     mov edx,[$0046dd20]
0046DE14 E8FB85F9FF      call @DynArraySetLength
0046DE19 83C404           add esp,$04
uIntegerList.pas.166: SetReserveManagment(rmExact);
0046DE1C 8BC6             mov eax,esi
0046DE1E 84DB            test bl,bl
0046DE20 740F            jz $0046de31
0046DE22 E82561F9FF      call @AfterConstruction
0046DE27 648F0500000000   pop dword ptr fs:[$00000000]
0046DE2E 83C40C          add esp,$0c
0046DE31 8BC6             mov eax,esi
0046DE33 5E              pop esi
0046DE34 5B              pop ebx
0046DE35 C3               ret
0046DE36 8BC0             mov eax,eax

Zitat von DeddyH:
Und wenn Du den Konstruktor dahingehend änderst, dass Du das private Feld belegst statt der Property?
Delphi-Quellcode:
constructor TIntegerList.Create;
begin
  inherited;
  FCount := 0;
  FReserveManagment := rmExact;
end;
Das hat keine Auswirkungen.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Eigenschaft wird gesetzt ohne Wirkung

  Alt 25. Jan 2009, 17:30
Hast du Inlining angeschaltet?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Eigenschaft wird gesetzt ohne Wirkung

  Alt 25. Jan 2009, 17:32
Kann sein. Wo kann ich das unter Delphi 2009 überprüfen?

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Eigenschaft wird gesetzt ohne Wirkung

  Alt 25. Jan 2009, 17:38
Das sollte irgendwo in den Projektoptionen verzeichnet sein. Du kannst aber auch einfach mal {$INLINE OFF} vor die Klassendeklaration setzen und nachschauen, ob sich etwas verändert.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Eigenschaft wird gesetzt ohne Wirkung

  Alt 25. Jan 2009, 17:40
Also an den Werten ändert das nichts.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Eigenschaft wird gesetzt ohne Wirkung

  Alt 25. Jan 2009, 17:44
Schalte mal mit {$O-} die Optimierungen ganz aus. Die CPU-Ansicht sollte sich dann verändern.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Eigenschaft wird gesetzt ohne Wirkung

  Alt 25. Jan 2009, 17:50
Okay... Ich weiß nicht wie ich es hingekriegt habe, aber er war in der falschen Unit. Und in der die er genommen hat, gab es die Zuweisung noch nicht. Dennoch Danke für eure Mühe.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz