Delphi позволяет «скрывать» ваши старые свойства и вводить свойства с одинаковыми именами, которые работают по-разному. Я использовал это, например, для создания своих собственных безопасных потомков TList для определенного класса или записи:
type
TMyList = class(TList)
private
function GetItem(Index: Integer): TMyObject;
procedure SetItem(Index: Integer; Value: TMyObject);
public
property Items[Index: Integer]: TMyObject read GetItem write SetItem;
end;
function TMyList.GetItem(Index: Integer): TMyObject;
begin
Result := TMyObject(inherited Items[Index]);
end;
procedure SetItem(Index: Integer; Value: TMyObject);
begin
inherited Items[Index] := Value;
end;
Конечно, с Delphi 2009 и дженериками, теперь стало намного проще.
Какой идентификатор вы используете, зависит от того, откуда вы звоните.
procedure TSub.Foo;
begin
ID := 5; //TSub.ID
inherited ID := 6 //TBase.ID
end;
procedure TBase.FooBar;
begin
ID := 5; //TBase.ID
end;
var
Sub: TSub;
Base: TBase;
begin
Sub := TSub.Create;
try
Sub.ID := 1; //assign 1 to TSub.ID
TBase(Sub).ID := 2; //assign 2 to TBase.ID
WriteLn(Sub.ID); //writes 1
WriteLn(TBase(Sub).ID); //writes 2
Base := Sub;
WriteLn(Base.ID); //writes 2
finally
Sub.Free;
end;
end;