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/)
-   -   Deprecated nicht möglich bei Properties? (https://www.delphipraxis.net/170655-deprecated-nicht-moeglich-bei-properties.html)

bernau 27. Sep 2012 12:45

Delphi-Version: 5

Deprecated nicht möglich bei Properties?
 
Ich wollte heute ein Property in einem Objekt als deprecated markieren, damit der Compiler in den verschiedenen Projekten die entsprechenden Stellen anzeigt, in dem das Property verwendet wurde.

Bei normalen Proceduren funktioniert das wunderbar.

Folgender Fehler erscheint aber bei Properties.


Delphi-Quellcode:
property Bonusfaehig: boolean read fBonusfaehig write fBonusfaehig; deprecated;
Zitat:

"[DCC Fehler] gpl6objects.pas(3072): E2169 Felddefinition nicht erlaubt nach Methoden oder Eigenschaften"
Wie kann ich dies umgehen?

Stevie 27. Sep 2012 13:00

AW: Deprecated nicht möglich bei Properties?
 
Ist leider ein bekannter (bekannt im Sinne von, steht im QC) Bug: http://qc.embarcadero.com/wc/qcmain.aspx?d=96350 (wobei Bug relativ ist, denn es steht auch nicht in der Dokumentation, dass deprecated für Eigenschaften geht)

bernau 27. Sep 2012 14:23

AW: Deprecated nicht möglich bei Properties?
 
Schade.

David Martens 27. Sep 2012 17:24

AW: Deprecated nicht möglich bei Properties?
 
Mit einem kleinen Umweg schon möglich.

aus
Delphi-Quellcode:
property Bonusfaehig: boolean read fBonusfaehig write fBonusfaehig;
Delphi-Quellcode:
function GetBonusfaehig : boolean; deprecated;
procedure SetBonusfaehig(const Value : boolean); deprecated;

property Bonusfaehig: boolean read GetBonusfaehig write SetBonusfaehig; deprecated;
machen, dann wird
Delphi-Quellcode:
deprecated
für jeden Aufruf von Bonusfaehig generiert. Ist sowieso schöner immer Get- und Setmethoden zu verwenden.

Stevie 27. Sep 2012 17:57

AW: Deprecated nicht möglich bei Properties?
 
Zitat:

Zitat von David Martens (Beitrag 1184739)
Mit einem kleinen Umweg schon möglich.

aus
Delphi-Quellcode:
property Bonusfaehig: boolean read fBonusfaehig write fBonusfaehig;
Delphi-Quellcode:
function GetBonusfaehig : boolean; deprecated;
procedure SetBonusfaehig(const Value : boolean); deprecated;

property Bonusfaehig: boolean read GetBonusfaehig write SetBonusfaehig; deprecated;
machen, dann wird
Delphi-Quellcode:
deprecated
für jeden Aufruf von Bonusfaehig generiert. Ist sowieso schöner immer Get- und Setmethoden zu verwenden.

Zumindest in XE werden hier nur 2 deprecated Warnings generiert, nämlich für die Verwendung der beiden Methoden als Getter und Setter.
Nicht aber bei der Verwendung der Eigenschaft selber irgendwo im Code.

DeddyH 27. Sep 2012 18:30

AW: Deprecated nicht möglich bei Properties?
 
Eben, sonst könnte man auch einfach
Delphi-Quellcode:
{$MESSAGE Warn 'Property ''Bonusfaehig'' ist veraltet'}
schreiben.

haentschman 27. Sep 2012 18:42

AW: Deprecated nicht möglich bei Properties?
 
Hallo...

wenn es nur darum geht die Stellen zu finden sollte doch eine Änderung des Typs der Property (nicht kompatibel) in der Deklaration reichen. Alle Stellen wo die Property verarbeitet wird sollte als Fehler auftauchen.

himitsu 27. Sep 2012 19:21

AW: Deprecated nicht möglich bei Properties?
 
Ich bennen bei sowas den Property einfach um.
Meist kommt da ein _ vorne dran.

Beim Kompilieren wird überall emeckert, weil es ja nun unbekannt ist und wo man es unverändert lassen will, kann man den Aufrufen ebenfalls schnell ein _ davorschreiben.
Nachher dann wieder den _ löschen und beim kompilieren reicht es meistens F9+Enter+Entf, da der Compilier meist am Anfang des unbekannten Bezeichners wartet.


Aber ja, es wäre natürlich praktischer, wenn man stattdessen die Depreacated-Warnunge bekommen könnte.

bernau 27. Sep 2012 22:18

AW: Deprecated nicht möglich bei Properties?
 
Deprecated im Getter oder Setter bringt nichts, da ich einen Hinweis an den Stellen haben möchte, an denen das Property verwendet wird.


Das Property (bzw. das Objekt) wird in vielen verschiedenen Projekten verwendet, deshalb ist ein Umbenennen oder Löschen nicht sinnvoll, da ich dann alle Projekte sofort ändern und testen müsste. Wenn mal ein Projekt bearbeitet werden muss, dann kann ich immer noch die Änderung vornehmen. Dazu sollte ich aber dann hingewiesen werden. Sollte ich dann aber unter Zeitdruck sein, dann kann ich es so lassen wie es ist und später ändern. Das ist der Vorteil von deprecated.

himitsu 27. Sep 2012 23:13

AW: Deprecated nicht möglich bei Properties?
 
Tja, dann bleibt dir nur noch ein VOTE im QC und hoffen die schaffen es bs XE4.

In wie weit man sich mit den verschiedenen Refactoring-Funktionen behelfen könnte, weiß ich jetzt auch nicht.
Im Notfall müßtest du eben alle Aufrufe (manuell) suchen und dir dort jeweils soeinen HINT {$MESSAGE} einbauen.
Bei einem ReadOnly-Property könnte man das Property in eine Deprecated-Methode abändern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 Uhr.
Seite 1 von 2  1 2      

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