У меня есть два интерфейса: ISomeInterfaceRO (только для чтения) и ISomeInterface.Delphi - интерфейс как другой интерфейс
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;
Затем я использую только для чтения интерфейс, за исключением одного места, когда я создаю экземпляр TSomeClass как ISomeInterface и заполнить его. Пример:
Function GetSome: ISomeInterfaceRO;
var
SomeInterface: ISomeInterface;
begin
SomeInterface := TSomeClass.Create;
SomeInterface.Test := 10;
result := SomeInterface as ISomeInterfaceRO;
end;
Мой вопрос: что "результат: = SomeInterface в ISomeInterfaceRO;" безопасная и рекомендуемая конструкция? Или это еще один способ сделать это? Я отлаживал этот код, а компилятор правильно уменьшал количество ссылок на ISomeInterface и увеличивался до ISomeInterfaceRO, когда я использую «как».
Это не право изменить вопрос после того, как был дан ответ. Вы должны принять лекарство и признать ошибку. В конце концов, я дал вам справедливое предупреждение о проблемах на G +. Теперь вам нужно задать новый вопрос. –
Хорошо, я запомню это на будущее – Stregor