Difference between revisions of "Property attributes"

From Lazarus wiki
Jump to navigationJump to search
m
(Redirected page to Custom Attributes)
Tag: New redirect
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
 
+
#REDIRECT [[Custom Attributes]]
== Attributes ==
 
 
 
Attributes are an Object Pascal syntax feature introduced in Delphi 2010.
 
([http://docwiki.embarcadero.com/RADStudio/XE6/en/Overview_of_Attributes Attributes reference], [http://delphi.about.com/od/oopindelphi/a/delphi-attributes-understanding-using-attributes-in-delphi.htm tutorial])
 
 
 
This page describes a proposal for property attributes created in 2007 (thus predating the Delphi syntax).
 
 
 
As of 2014, no released version of FPC supports attributes.
 
 
 
According to Sven Barth ([http://free-pascal-general.1045716.n5.nabble.com/Property-attributes-tp5718442p5718444.html Feb 2014]):
 
 
 
<blockquote>
 
There is a branch which already supports class attributes. Property
 
attributes (or any other kind of attributes) are not supported yet. Also
 
they are implemented Delphi compatible (with attributes being in front
 
of the class instead of after it).
 
</blockquote>
 
 
 
The rest of this page describes the older, proposed syntax, and not any current or planned implementation.
 
 
 
 
 
== Syntax Diagram ==
 
 
 
  PropertyDeclaration ::= PROPERTY Identifier [PropertyInterface] [PropertySpecifiers]  [Directives]<br>
 
  PropertySpecifiers ::= [ ... ]
 
                        [ ... ]
 
                        [ATTRIBUTES AttributesArray]<br>
 
  AttributesArray ::= '[' (AttributeDeclaration [, AttributeDeclaration]) ']'<br>
 
  AttributeDeclaration ::= ''''<string>':'<string>''''<br>
 
 
 
== Declaration Examples ==
 
 
 
<syntaxhighlight>
 
TmenuItem = class(...)
 
...
 
property Detachable: Boolean read FDetachable write SetDetachable attributes
 
['widgetsets:qt,gtk,win32', 'implementor:Vasya Pupkin', 'creation-date:01.01.2007'];
 
...
 
end;
 
</syntaxhighlight>
 
 
 
<syntaxhighlight>
 
TxxxDatabase = class(...)
 
...
 
property TransactionModel: TTransactionModel read FtransactionModel write
 
SetTransactionModel attributes ['engines:firebird,oracle,sybase-asa'];
 
...
 
end;
 
</syntaxhighlight>
 
 
 
== How to store additional info ==
 
 
 
There were two suggestions about the place for the property attributes:
 
 
 
#RTTI. Advantage - easier access from application. Disadvantage - bigger final executable.
 
#PPU. Advantage - info will not be added to executable. Disadvantage - more complicated way of accessing data.
 
 
 
As a result of the discussion PPU storage has been selected. This happened somewhere in 2008 looking at this article's revision history.
 
 
 
[[Category:FPC]]
 
[[Category:Proposals]]
 

Latest revision as of 21:17, 25 July 2019

Redirect to: