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

Вниз

в чем смысл   Найти похожие ветки 

 
vecna ©   (2004-09-28 14:47) [0]

конструкции Assigned(Self) в методах объекта?


 
DiamondShark ©   (2004-09-28 14:50) [1]

Защита от дурака.


 
Fay ©   (2004-09-28 19:32) [2]

2 DiamondShark ©   (28.09.04 14:50) [1]
И что она даёт?


 
wicked ©   (2004-09-28 19:50) [3]


> И что она даёт?

гы... защищает от дурака.... :)

а если серьезно, то защита состоит в том, чтоб не вызывали методы обьекта по nil"ной ссылке на этот обьект... хотя если метод виртуальный или dynamic, то нифига оно от AV не спасет...


 
Vlad ©   (2004-09-28 20:01) [4]


> wicked ©   (28.09.04 19:50) [3]


> защита состоит в том, чтоб не вызывали методы обьекта по
> nil"ной ссылке на этот обьект

что-то не понял, разве есть способы вызвать метод объекта по nil-ной ссылке не получив при этом AV ?


 
KilkennyCat ©   (2004-09-28 20:03) [5]

а я думал наследование...


 
Суслик ©   (2004-09-28 20:03) [6]


>  хотя если метод виртуальный или dynamic, то нифига оно
> от AV не спасет...

а нечего клиенту виртуальные методы вызывать :))


 
Суслик ©   (2004-09-28 20:04) [7]


>  [4] Vlad ©   (28.09.04 20:01)


> что-то не понял, разве есть способы вызвать метод объекта
> по nil-ной ссылке не получив при этом AV ?

Метод free например.
знаешь такой?


 
jack128 ©   (2004-09-28 20:29) [8]

2Vlad
type
 TTest = class
   procedure Test;
 end;

procedure TForm1.Button1Click(Sender: TObject);
var
 t: TTest;
begin
 t.Test;
end;

{ TTest }

procedure TTest.Test;
begin
 ShowMessage("test");
end;
Суслик ©   (28.09.04 20:04) [7]
Метод free например

Не только. Любой статический метод, который не обращается к своим полям..


 
Суслик ©   (2004-09-28 20:32) [9]


> Не только

потому я и сказал "например".


 
DrPass ©   (2004-09-28 20:46) [10]


> что-то не понял, разве есть способы вызвать метод объекта
> по nil-ной ссылке не получив при этом AV ?

Метод объекта нельзя. А вот статический метод класса - можно.


 
Константинов ©   (2004-09-28 22:20) [11]

Может я немного не в тему, допустим я вызываю свойство-событие объекта:

MyObject.OnChange(Self);

а обработчик не назначен.

Успешно ловим AV и никакой Assigned не помогает.

Как, при создании классов обойти это?


 
wicked ©   (2004-09-28 22:32) [12]

> Константинов ©   (28.09.04 22:20) [11]
if Assigned(MyObject.OnChange) then
   MyObject.OnChange(Self);

а так?.....


 
wicked ©   (2004-09-28 22:41) [13]

по мотивам
> wicked ©   (28.09.04 22:32) [12]
обычно компоненто- и классо-писатели такие моменты заворачивают в методы вида DoSomething:
procedure MyObject.DoChange(Sender: TObject);
begin
   if Assigned(OnChange) then
       OnChange(Sender);
end;

и вызов:
MyObject.DoChange(Self);

ЗЫ за ошибки не пинать - на паскале не пишу уже больше полутора лет.... :)



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
8-1090602215
zlo_inside
2004-07-23 21:03
2004.10.17
Загрузить и нарисовать изображение в PNG


3-1095174226
DIS
2004-09-14 19:03
2004.10.17
отчет Fastreport


1-1097052892
Lord de Mon
2004-10-06 12:54
2004.10.17
Массив EDITов


8-1090082002
Ale}{(is)
2004-07-17 20:33
2004.10.17
мне привести 24-битное изображение к 8-битному...


1-1096366533
Muhsin
2004-09-28 14:15
2004.10.17
После компиляции на другой компьютер не работает.