Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 2 Interfaces mit gleichem property (https://www.delphipraxis.net/80723-2-interfaces-mit-gleichem-property.html)

hoika 14. Nov 2006 12:19


2 Interfaces mit gleichem property
 
Hallo #,

ich habe hier eine fremde Klasse A,
die 2 Interfaces implementiert,
und zwar werden die über implements an andere interne Klassen B und C weitergeleitet.

das property Interval Cardinal existiert in beiden Interfaces
und somit auch in den beiden Klassen.
Ein

KlasseA.Interval führt aber zum Compilerfehler ( Interval not found).

Das macht man denn da in diesem Fall ?

Die Klasse ist übrigens jclSchedule (aus JEDI),
jaja, da hänge ich immer noch ;( :wall:


Heiko

Sidorion 14. Nov 2006 13:00

Re: 2 Interfaces mit gleichem property
 
Ist ja klar, da Deine KlasseA die Property Interval nicht selber bereitstellt, weiß der Compiler nicht, welches der beiden Interfaces Du ansprechen willst.
Abhilfe schafft der Cast Deiner Instanz der KlasseA auf eine der Beiden Schnttstellen, je nachdem welche Du gerade ansprechen willst.
z.B.:
Delphi-Quellcode:
IInterfaceB(KlasseA).Interval
Da die Kallse A das InterfaceB hat, sind die beiden Typen zuweisungskompatibel und durch den Cast hilfst Du dem Compiler, die richtige Methode zu finden.

Alternativ kannst Du in der KlasseA die Get und Set Methode der Property Interval eines der Interfaces bereitstellen, und zwar mit:
Delphi-Quellcode:
procedure Schnittstelle.Schnittstellenmethode = implementierndeMethode;
Wobei ich allerdings jetzt nicht genau weiss, ob das hilft, da der Compiler ja immernoch nicht weiss, welches der Beiden Interfaces Du mit
Delphi-Quellcode:
KlasseA.Interval
ansprechen willst.

hoika 14. Nov 2006 13:12

Re: 2 Interfaces mit gleichem property
 
Hallo,

der TypeCast erzeugt eine Schutzverletzung an einer anderen Stelle
(SetStart) der Klasse A.
Ich habe das jetzt etwa so gelöst,
indem ich das property Intervall in Klasse A noch mal definiert habe,
und in der setter-Methode einer der Klassen-Interval property anspreche.
Ist aber trotzdem eigenartig.

Das dumme ist, der Programmierer hat 5 (die 6. ist das KlasseA) interfaces
für verschiedene Kalender (Tag, Tag+Intervall, Woche, Monat, Jahr),
hat aber für Tag und Tag+Intervall keine Unterscheidung,
welcher Typ es denn nun ist.

Interval bei Tag heisst Tag ab Startdatum
Interval bei Tag+Intervall sind aber die Stunden innerhalb des Tages.

Ich bin schon dauf und dran, dass wirklich selber zu coden ;(


Heiko

Sidorion 14. Nov 2006 14:20

Re: 2 Interfaces mit gleichem property
 
Tja Je Selber, desto Lerneffekt.
Das mit der Schutzverletzung kommt warscheinlich daher, dass Du das Ding als Klasseninstanz angelegt hast. Interfaces zählen grundsätzlich die Referenzen mit, das funktioniert aber nur, wenn Du die Klasse über das Interface instanzierst, sonst wird nach dem Konstruktor gleich wieder weggeschmissen.

hoika 14. Nov 2006 14:52

Re: 2 Interfaces mit gleichem property
 
Nein,

die Klasse ist als Form-Variable definiert.
Hinterher kommt noch etwas Code, der klappt ja.
egal, es klappt ja jetzt ! *freu* :cheers:


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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-2025 by Thomas Breitkreuz