Results 1 to 6 of 6

Thread: Opties tussen []

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,377

    Opties tussen []

    Ik zie regelmatig deze regels in een unit staan.
    Delphi Code:
    1. [Table('DEPT')]
    2.   [Model('Demo')]
    3.   [Key('FDeptno')]
    Ik kwam dit laatst ook tegen in DBGrid.pas bij de TCustomDBGrid.
    Delphi Code:
    1. published
    2.     property Align;
    3.     property Anchors;
    4.     property BiDiMode;
    5.     property BorderStyle;
    6.     property Color;
    7.     [Stored(False)]


    Maar wat doet het precies?
    Delphi is great. Lazarus is more powerfull

  2. #2
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    9,796
    Custom RTTI denk ik, typisch wordt het aan het symbool gehangen op de regel erna (lelijk C#ism, in Delphi komen modifiers normaal NA de declaratie). XE2+ feature geloof ik.

    Stored false kan ook zonder haken, het betekent dat die property niet gestreamed wordt als de class gestreamed wordt. Misschien dat ze de [] syntax gebruiken omwille van de mobiele compiler of zo.

    In modern design worden modifiers altijd in een list gewrapped (GCC en GPC deden dat al in 1993). Dit maakt het voor andere tools (b.v. documentatie tools, formatters , preprocessors etc ) makkelijker voor hun onbelangrijke modifiers te skippen.

  3. #3

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,377
    Dus eigenlijk is het een soort object, die niet hoeft worden opgestart via de implementation section maar rechtstreeks via de interface.
    Delphi is great. Lazarus is more powerfull

  5. #5
    Inderdaad, maar dat het een object is, maakt nog niet eens zoveel uit. Het is een beschrijving van het element dat erop volgt. Je ziet het bijvoorbeeld ook als je DUnitX gebruikt. Je zet bijvoorbeeld [Test] voor de test methods. Het DUnitX framework weet daardoor dat het die methods moet aanroepen als test.

    Een ander voorbeeld is voor mappers. Je kan bijvoorbeeld een record of class gebruiken om de rijen van een dataset in in te lezen. Een stuk generieke code kan alle properties automatisch vullen op basis van de overeenkomt tussen de property-naam en de veldnaam. In sommige gevallen komen die niet overeen, (bijvoorbeeld OrderId in code, maar order_id in de dataset) en dat kan je dan bijvoorbeeld met zo'n attribute [Field('order_id')] aangeven.

    Al met al zorgt het ervoor dat je je class, method of property kunt categoriseren, zodat frameworks en libraries er gebruik van kunnen maken, zonder dat ze specifiek afhankelijk zijn van class hierarchie, naamgeving, of specifiek uitgeprogrammeerde logica.

    In TCustomDBGrid staan die attributen er eigenlijk dubbel. Ze staan met deze notatie vóór de properties, maar ook nog standaard (bijv.default false) achter de properties. Ik betwijfel of het is voor de mobiele compiler, aangezien het een VCL control is. Maar waarom dan wel... ?
    Last edited by GolezTrol; 02-Dec-18 at 02:11.
    1+1=b

  6. #6
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    9,796
    Ik twijfelde daarom (VCL) ook al toen ik het schreef. Mogelijk een optie voor een embedded RTL/VCL (zonder extended RTTI) ?

    Extended RTTI blaast binaries enorm op.

Thread Information

Users Browsing this Thread

There are currently 2 users browsing this thread. (0 members and 2 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •