Hallo,
Zitat von
Thorus:
Wieso kann ich nicht "const e: IElem" statt "const e: IInterface" machen? Spielt das eine Rolle bei dem folgendem Problem?
Das spielt keine Rolle, aber IInterface ist allgemeiner.
Zitat von
Thorus:
Ich hatte etwas vergessen, nämlich, im Interface IElem soll es die Funktion "Str" nicht geben, aber bei der Implementation von TElemStr schon.
Ist doch kein Problem.
Zitat von
Thorus:
Jetzt bleibt das Problem, wie ich in der Funktion equals (1. Nachricht) casten kann. Und dann auf die Funktion Str zugreifen kann.
Soll das heißen, Du willst über das Interface auf das Objekt zugreifen? Dann kannst Du sowas machen:
Delphi-Quellcode:
type
IElem =
interface(IInterface)
['
{8D4708F4-026A-4CE6-B8EB-5CC20D1FF32A}']
// <- Beispiel-GUID
function Equals(
const e: IInterface): Boolean;
// <- Interfaces *IMMER* als const übergeben, spart Referenzzählung
function GetSelf: TObject;
// <- Gibt das eigentliche Objekt zurück
end;
TElemStr =
class(TInterfacedObject, IElem)
private
Content:
string;
public
function Equals(
const e: IInterface): Boolean;
function GetSelf: TObject;
end;
implementation
uses
SysUtils;
const
// Für Vergleich deklarieren
IID_ELEM: TGUID = '
{8D4708F4-026A-4CE6-B8EB-5CC20D1FF32A}';
function TElemStr.Equals(
const e: IInterface): Boolean;
begin
Result := Supports(e, IID_ELEM);
// implementiert "e" ein IElem?
// Aufruf der Objektfunktion:
if Result
then
TElemStr(e
as IElem).GetSelf).Str := '
xyz';
end;
function TElemStr.GetSelf: TObject;
begin
Result := Self;
end;
Gruß
xaromz