Форум: "Начинающим";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];
ВнизОбъект nil, а метод вызывается!!! Найти похожие ветки
← →
Grant (2009-11-27 13:13) [0]Всем привет. Объясните пожалуйста следующую осебенность Делфы.
Создаю приложение. Создаю ещё один юнит.
Код юнита:
unit Unit2;
interface
uses
SysUtils, Dialogs;
type
TGrant = class
public
procedure Met;
end;
implementation
procedure TGrant.Met;
begin
ShowMessage("aaa");
end;
end.
На главной форме добавляю в uses новый юнит(unit2) и пишу следующий код обработчика щелчка кнопки:
procedure TForm1.Button1Click(Sender: TObject);
var
vGrant: TGrant;
begin
vGrant.Met;
end;
При отладке переменная vGrant = nil. При этом метод выполняется и выводится на экран окно с сообщением. Вопрос: КАК??? Ведь переменная nil. Заранее спасибо.
← →
Плохиш © (2009-11-27 13:17) [1]
> Вопрос: КАК??? Ведь переменная nil.
Ну и что, в методе нет обращений к несуществующем переменным/полям.
Сделай поле в классе, вставь вывод его значения в своём методе и получишь своё желаемое исключение.
← →
RWolf © (2009-11-27 13:44) [2]Виртуальные методы вызываться не будут, т.к. чтобы их вызвать, нужно получить их адрес через VMT, которая заполняется при создании объекта.
А невиртуальные — пожалуйста, их адрес известен на этапе компиляции.
← →
Ухарь (2009-11-27 21:22) [3]В данном случае (в случае невиртуального метода) его можно рассмотреть как процедуру с неявным параметров Self: TMyObject;
В данном случае она имеет значение nil;
если вы внутри процедуры к этой переменной не обращаетесь, ничего неожиданного и не случится
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c