Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#18

AW: Interface und Objektreferenz offenbar noch nicht verstanden

  Alt 30. Sep 2015, 14:20
Wenn man ein TForm mit Interfaces ausstatten will, müsste man zudem ein Interface schreiben, das alle von außen genutzten Methoden (z.B. ShowModal) beinhaltet, damit man das Formular anzeigen kann, es weitere Interface-Methoden ansprechen kann und Reference Count dennoch funktioniert.
Nein, muss man für den Fall einer TComponent/TForm eben nicht.
Hier kann auch einfach geprüft (is-Operator) und gecastet werden (as-Operator), ohne das dir irgendetwas kaputt geht, weil der Reference Counting Mechanismus für TComponent anderes implementiert ist, als bspw. für TInterfaceObject.

Wenn es also heißt:
Delphi-Quellcode:
type
  TDeineForm = class(TCustomForm, IEineFunktionalität, IEineAndereFunktionalität)
...
Dann kannst du problemlos folgendes tun:
Delphi-Quellcode:
var
  MeineInstanz : IEineFunktionalität;
  LokalesForm : TForm;
begin
...
if MeineInstanz is TForm then
begin
  LokalesForm := MeineInstanz as TForm; // oder TForm(MeineInstanz), wenn wirklich durch is-Operator oder Supports(...) geprüft wurde
  LokalesForm.ShowModal;
...
end;

Ergibt sicher Sinn, die Logik "wenn ein Objekt irgendein Interface implementiert, dann sollten auch alle anderen Methoden des Objekts, die man nutzen will, über ein Interface verwendet werden" war mir noch nicht so klar.
Nochmal: Du muss nicht alle Methoden, Properties und Anhängsel einer Klasse im Interface abbilden.
Das wäre sonst sehr sehr falsch!
  Mit Zitat antworten Zitat