Недоступные члены во вложенном классе - ПОЧЕМУ? - PullRequest
4 голосов
/ 23 февраля 2011
TTest= class
public abc:Integer;
type
  TTest2 = class
    procedure test;
  end;
end;

procedure TTest.TTest2.test();
begin
  abc:=5; //'Inaccessible here'
end;

Я получаю «экземпляр члена abc здесь недоступен».

Ситуация серьезная.Я должен использовать поток, но поскольку TThread является абстрактным, его должен наследовать собственный класс.В моем случае класс, которому нужен поток, уже наследует другой класс, который не может наследовать TThread ... так что это невозможно.Мой сценарий - это вложенный класс для наследования TThread, и ниже я объявляю его.Но выполнить ();метод должен использовать члены своего родительского класса.

Как мне это сделать?Почему эта ошибка?

1 Ответ

14 голосов
/ 23 февраля 2011

Внутренний класс - это именно так: отдельный класс.Только его область имен вложена в родительский класс.Вы можете создать экземпляр внутреннего класса без экземпляра родительского класса.

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

В противном случае вам нужно будет передать экземпляр родительского класса во вложенный класс, чтобы вложенный класс мог записать в поля родительского экземпляра.

...