Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.17;
Скачать: CL | DM;

Вниз

Объект 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.008 c
15-1258483044
0x00FF00
2009-11-17 21:37
2010.01.17
Excel, массив длины N из одного элемента


2-1259073148
guest2009
2009-11-24 17:32
2010.01.17
ComboBox обрезка длинного текста


2-1259249199
TStas
2009-11-26 18:26
2010.01.17
События системы


15-1258482713
POOP
2009-11-17 21:31
2010.01.17
Клавиатура для программера...


2-1259427836
sagitt
2009-11-28 20:03
2010.01.17
Не работает RefResh под Vista