Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Interface als Result einer Function (https://www.delphipraxis.net/180793-interface-als-result-einer-function.html)

hanspeter 18. Jun 2014 09:57

Delphi-Version: XE2

Interface als Result einer Function
 
Ich habe nachfolgenden Konstruct:
Delphi-Quellcode:
 IMessageService = interface
    ['{GUI...}']
    procedure SubScribe(const ASubscriber : ISubScriber; const AFilt : Cardinal = 0);
  end;

function MessageService : IMessageService;
Das funktioniert auch.
Sobald ich aber Laufzeit Typinformationen einschalte, kommen zwei Fehlermeldungen.

function MessageService : IMessageService;
Typ <void> besitzt keine Typ Information.

Delphi-Quellcode:
TSubscrib = class
    Subsc: ISubScriber;
    Filter: Cardinal;
  end
Bringt bei eingeschalteter Laufzeittypinformation den Fehler
published Feld Filter ist weder Class noch Interface.
Füge ich public in der Definition ein, dann geht es.
(Ich dachte public ist Standard wenn keine Sichtbarkeit verwendet wird?)?
Hat wer eine Idee, was ich falsch mache?

Gruß
Peter

Der schöne Günther 18. Jun 2014 10:12

AW: Interface als Result einer Function
 
Eben nicht - published ist Standard. Sieht man an den Formular-Definitionen - Da stehen ja auch überhaupt keine Sichtbarkeitsmodifikatoren vor deinen Komponenten oder Event-Handlern ;-)

himitsu 18. Jun 2014 10:16

AW: Interface als Result einer Function
 
Nicht ganz.

Standard ist PUBLIC.
Aber wenn die Klasse entsprechend deklariert ist, so wie z.B. TPersistent und seine Nachfahren, dann wird dort der Standard zu PUBLISHED.
Delphi-Quellcode:
{$M+}
/
Delphi-Quellcode:
{$TYPEINFO ON}


Und Published-Methoden/Property/Felder unterliegen bestimmten Beschränkungen, wobei da dann nicht mehr alles erlaubt ist.

Der schöne Günther 18. Jun 2014 10:36

AW: Interface als Result einer Function
 
Oh, wieder was gelernt 8-)

hanspeter 19. Jun 2014 07:14

AW: Interface als Result einer Function
 
Trotzdem mein Problem noch nicht gelöst.
wie es aussieht läßt sich die erweiterte Typinformation auch nicht für ein einzelnes Unit abschalten.

hanspeter 19. Jun 2014 07:40

AW: Interface als Result einer Function
 
Und noch ein Nachtrag.
Eine Klasse, welche ohne Sichtbarkeit vereinbart ist, wird mit eingeschalteter Typinformation als published und mit ausgeschalteter Typinformation als public verwendet.

Delphi-Quellcode:
type
  TSEPA = class
    BIC: String;
    IBAN: String;
  end;
Kommt bei mir eine Fehlermeldung "Published Feld BIC ist weder vom Typ class noch interface"
Füge ich public ein, dann wird die Vereinbarung fehlerfrei compiliert.

Blup 19. Jun 2014 08:05

AW: Interface als Result einer Function
 
Wenn man Felder nicht als Property missbraucht, sollte es diese Meldung auch nicht geben.
Delphi-Quellcode:
type
  TSEPA = class
  private
    FBIC: String;
    FIBAN: String;
  published
    property BIC: string read FBIC write FBIC;
    property IBAN: string read FIBAN write FIBAN;
  end;

hanspeter 19. Jun 2014 08:12

AW: Interface als Result einer Function
 
Das es so geht, ist mir schon klar.
Was mich stört ist die unterschiedliche Sichtbarkeit public/published,
abhängig davon ob erweiterte Typinfo ein- oder ausgeschaltet ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 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