E2264 Methoden-Auflösung ist für Interface '%s' nicht erlaubt (Object Pascal)

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Object Pascal) - Index

Es wurde versucht, eine Klausel zum Auflösen einer Methode für eine Schnittstelle zu verwenden, die in einer implements-Klausel angegeben ist.


program Produce;
type
  I0 = interface
    procedure i0p0(a : char);
  end;

  T0 = class(TInterfacedObject, I0)
    procedure I0.i0p0 = proc0;
    function getter : I0;
    procedure proc0(a : char);
    property p0 : I0 read getter implements I0;
  end;

procedure T0.proc0(a : char);
begin
end;

function T0.getter : I0;
begin
end;
end.


In diesem Beispiel wird die Methode proc0 auf die Schnittstellenprozedur i0p0 abgebildet, aber da die Schnittstelle in einer implements-Klausel angegeben wurde, ist die Umbenennung nicht zulässig.


program Solve;
type
  I0 = interface
    procedure i0p0(a : char);
  end;

  T0 = class(TInterfacedObject, I0)
    function getter : I0;
    procedure i0p0(a : char);
    property p0 : I0 read getter implements I0;
  end;

procedure T0.i0p0(a : char);
begin
end;

function T0.getter : I0;
begin
end;
end.


Die Lösung besteht darin, die Klausel zur "Namensauflösung" zu entfernen. Dies ist einfach möglich, indem Sie die Prozedur in der Klasse genauso benennen wie die Schnittstellenmethode.