Главная страница
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-1258407015
Юрий
2009-11-17 00:30
2010.01.17
С днем рождения ! 17 ноября 2009 вторник


15-1258023746
stas
2009-11-12 14:02
2010.01.17
Альтернатива TWebBrowser


2-1258722733
Andrewtitoff
2009-11-20 16:12
2010.01.17
Форма


2-1258895265
Виктор
2009-11-22 16:07
2010.01.17
Представление данных базы данных в Word


10-1161933035
incms
2006-10-27 11:10
2010.01.17
Онибка при вызове метода интерфейса