Ich habe zwei Schnittstellen, ISomeInterfaceRO (nur lesen) und ISomeInterface.Delphi - Schnittstelle als eine andere Schnittstelle
ISomeInterfaceRO = interface(IInterface) ['{B28A9FB0-841F-423D-89AF-E092FE04433F}']
function GetTest: Integer;
property Test : integer read GetTest;
end;
ISomeInterface = interface(ISomeInterfaceRO) ['{C7148E40-568B-4496-B923-89BB891A7310}']
procedure SetTest(const aValue: Integer);
property Test : integer read GetTest write SetTest;
end;
TSomeClass = class(TInterfacedObject, ISomeInterfaceRO, ISomeInterface)
private
fTest: integer;
protected
function GetTest: integer;
procedure SetTest(const aValue: integer);
public
property Test: integer read GetTest write SetTest;
end;
function TSomeClass.GetTest: integer;
begin
Result := fTest;
end;
procedure TSomeClass.SetTest(const aValue: integer);
begin
fTest := aValue;
end;
Dann benutze ich nur mit einer Ausnahme Ort-Schnittstelle gelesen, wenn ich TSomeClass Instanz als ISomeInterface erstellen und füllen. Beispiel:
Function GetSome: ISomeInterfaceRO;
var
SomeInterface: ISomeInterface;
begin
SomeInterface := TSomeClass.Create;
SomeInterface.Test := 10;
result := SomeInterface as ISomeInterfaceRO;
end;
Meine Frage ist: das "Ergebnis: = SomeInterface als ISomeInterfaceRO;" ist eine sichere und empfohlene Konstruktion? Oder ist das ein anderer Weg? Ich debuggte diesen Code, und der Compiler reduzierte die Referenzanzahl korrekt auf ISomeInterface und erhöhte auf ISomeInterfaceRO, wenn ich "as" verwendete.
Es ist nicht richtig, die Frage zu ändern, nachdem der Anruf beantwortet wurde. Sie sollten Ihre Medizin nehmen und den Fehler erkennen. Immerhin habe ich Sie rechtzeitig vor den Problemen von G + gewarnt. Jetzt müssen Sie eine neue Frage stellen. –
Ok, das werde ich mir für die Zukunft merken – Stregor