Главная страница
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.039 c
1-1096885990
Aleksandr.
2004-10-04 14:33
2004.10.17
Помогите с теорией, как организовать работу объекта.


1-1096792138
nof
2004-10-03 12:28
2004.10.17
StrToChar


3-1093710034
Zif
2004-08-28 20:20
2004.10.17
Как в DBImage отображать файл с разрешением *.ico?


8-1090408912
asat
2004-07-21 15:21
2004.10.17
{BMP} -> AVI


1-1096867757
_Дельфин_
2004-10-04 09:29
2004.10.17
Создание приложений