Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.037 c
4-1095434702
AdmeraL
2004-09-17 19:25
2004.10.17
справочник WinApi


14-1096338106
saysu
2004-09-28 06:21
2004.10.17
Multitier technologies versus (Кто выиграет?)


1-1096382476
Antonmm2
2004-09-28 18:41
2004.10.17
Функции


1-1096418769
QuestionX
2004-09-29 04:46
2004.10.17
Способ хранения информации


1-1096761465
Klopan
2004-10-03 03:57
2004.10.17
Поиск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский