Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.007 c
1-1233308348
kyn66
2009-01-30 12:39
2010.01.17
FileListBox1 - отсутствует сортировка


6-1211794870
PES
2008-05-26 13:41
2010.01.17
Почему Clientsocket на одних компах коннектится, а на других нет?


3-1233431699
123
2009-01-31 22:54
2010.01.17
ПОИСК


1-1233569939
OlegNik
2009-02-02 13:18
2010.01.17
Работа с общей памятью.


15-1258102282
Dennis I. Komarov
2009-11-13 11:51
2010.01.17
Значит пятница пришла, задачка




   Наверх