Ссылка на экземпляр в Delphi? - PullRequest
6 голосов
/ 23 июля 2011

Что такое Delphi-эквивалент «this» в C ++?Не могли бы вы привести несколько примеров его использования?

Ответы [ 2 ]

9 голосов
/ 23 июля 2011

В Delphi Self является эквивалентом этого.Его также можно назначить, как описано в здесь .

3 голосов
/ 23 июля 2011

В большинстве случаев не следует использовать self в методах.

На самом деле, это похоже на то, что при доступе к свойствам и методам класса внутри класса существовал неявный префикс self..Метод:

type
  TMyClass = class
  public
    Value: string;
    procedure MyMethod;
    procedure AddToList(List: TStrings);
  end;


procedure TMyClass.MyMethod;
begin
  Value := 'abc';
  assert(self.Value='abc'); // same as assert(Value=10)
end;

self должен использоваться, если вы хотите указать текущий объект для другого метода или объекта.

Например:

procedure TMyClass.AddToList(List: TStrings);
var i: integer;
begin
  List.AddObject(Value,self);
  // check that the List[] only was populated via this method and this object
  for i := 0 to List.Count-1 do 
  begin
    assert(List[i]=Value);
    assert(List.Objects[i]=self);
  end;
end;

Приведенный выше код добавит элемент в список TStrings, а List.Objects [] будет указывать на экземпляр TMyClass.И он проверит, что это относится ко всем пунктам списка.

...