![]() |
Delphi-Version: XE2
Interface als Result einer Function
Ich habe nachfolgenden Konstruct:
Delphi-Quellcode:
Das funktioniert auch.
IMessageService = interface
['{GUI...}'] procedure SubScribe(const ASubscriber : ISubScriber; const AFilt : Cardinal = 0); end; function MessageService : IMessageService; Sobald ich aber Laufzeit Typinformationen einschalte, kommen zwei Fehlermeldungen. function MessageService : IMessageService; Typ <void> besitzt keine Typ Information.
Delphi-Quellcode:
Bringt bei eingeschalteter Laufzeittypinformation den Fehler
TSubscrib = class
Subsc: ISubScriber; Filter: Cardinal; end 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 |
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 ;-)
|
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. |
AW: Interface als Result einer Function
Oh, wieder was gelernt 8-)
|
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. |
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:
Kommt bei mir eine Fehlermeldung "Published Feld BIC ist weder vom Typ class noch interface"
type
TSEPA = class BIC: String; IBAN: String; end; Füge ich public ein, dann wird die Vereinbarung fehlerfrei compiliert. |
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; |
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 10:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz