Форум: "Потрепаться";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Внизв чем смысл Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c