Es geht ja mit Delphi schon so:
*snip*
Das hast du dir aber nur so hingebogen, weil foo von
TFoo
ist und nicht wie im Beispiel oben von
IFoo
, worum es auch hier eigentlich geht.
Ich kann dir nicht sagen, was C# da genau macht, wenn man ein IFoo an ein IBar oder IBaz übergibt (hab mir den
IL Code nicht angeschaut). Aber dadurch, dass dort fest steht, "wenn IFoo implementiert wird, dann ist auch IBar und IBaz implementiert" ist sichergestellt, dass ein Cast von IFoo auf IBar oder IBaz immer erfolgreich ist.
Und genau das geht in Delphi ebend nicht.
Der Delphicompiler müsste nur zwei Dinge zusätzliche beherschen:
Delphi-Quellcode:
TFoo = class(TInterfacedObject, IFoo) // IBar, IBaz, alle Eltern durch den Compiler versteckt mit angelegt}
DoSomething(foo); // (foo as IBar) duch den Compiler automatische Abfrage des passenden Elter
Das vermisse ich eigentlich schon fast so lange, wie ich mit Interfaces in Delphi arbeite.
Exakt. Ich werd mal nachfragen, ob sowas mal angegangen werden könnte.