Zitat von
xZise:
Zitat von
Muetze1:
Das recht komische dabei ist dabei, dass du unterschiedliche Klassen verwendest.
... wobei ja TSheet ein Nachfahre von TTabSheet ist! Deshalb habe ich angenommen, der schluckt das.
Ja klar, wenn du es nicht neu definiert hättest. Du kannst doch die Eigenschaft mit dem Typ der Basisklasse (TTabSheet) doch einfach mit vererben und auch mit einer Instanz einer abgeleiteten Form befüllen. Ist doch kein Problem!
Zitat von
xZise:
Zitat von
Muetze1:
Dazu kommt noch, dass du die Instanz in der Ableitung erstellst aber in der Basis freigibst.
Naja
Wenn ich den Tab freigebe, dann gebe ich auch das TabSheet dazu frei. Aber wenn ich das erstelle weiß ich nicht ob der Tab vom Typ "TTabSheet" oder vom Typ "TSheet" ist.
Das ist egal - der Destruktor ist virtuell und wird überschrieben. Dadurch kannst du auch TObject(fSheet).Free; aufrufen und es wird der Destruktor von TSheet bzw. TTabSheet aufgerufen.
Zitat von
xZise:
Und warum kann man nicht einfach FSheet override;n ?
Das ist eine Property und keine Methode. Was du hier suchst ist eine virtuelle Property die du überschreiben kannst. Wenn du eine Methode nicht mit virtuell kennzeichnest und in der Ableitung nochmal eine gleichnamige Methode mit einer anderen Signatur einfügst, dann wird die originale auch verdeckt. Gleiches hier bei den Properties, nur das du bei Methoden virtual angeben könntest und bei Properties nicht.
Zitat von
xZise:
Ist doch müll xD Also werde ich wohl einer der einzigen Gemeinsamkeit entfernen
OBWOHL
müsste es nicht gehen, wenn ich einfach den
FSheet : TSheet entferne (und die Prozedur/Property) müsste es doch laufen
Gleich mal ausprobieren xD
Ja, sollte: wie oben beschrieben: In der Basisklasse TTab die Eigenschaft auf Basis der TTabSheet (also der Basisklasse) und in der Ableitung kannst du dort dann genauso die Instanz deiner abgeleiteten Klasse TSheet ablegen. Das einzige ist dann halt: Du müsstest für den Zugriff auf die erweiterten Eigenschaften von TSheet einen Typecast vollziehen - also IS / AS Operationen. IS ist ja auch wichtig, weil du ja erstmal in Erfahrung bringen musst, ob du nun ein TTabSheet oder ein TSheet in der Eigenschaft hast (oder nil, dann sagt IS zu beiden nein).
Zitat von
xZise:
Zitat von
Muetze1:
Aber das du die alte Eigenschaft verdeckst und eine neue deklarierst, hättest du aber wirklich mal sagen können.
^^ Naja die
IDE hat sich nicht beschwert xD
Nein, ist auch ein normales sprachliches Mittel der Delphi Language...
Zitat von
xZise:
Zitat von
Muetze1:
Schliesslich hat das ganze Problem nachweislich nichts virtual & | abstract zu tun.
Naja. Ich hatte auch im ersten Post geschrieben, dass es mir
nicht nur um abstract &|| (solle das nicht eher so sein ^^) virtual geht.
Naja, deshalb ja das | ...