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

Вниз

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

 
Alek   (2011-10-29 01:06) [0]

Добрый день.

А как правильно передать по ссылке метод класса?

Command.ResultCallback := @Self.onNavigateComplete;

Если метод выносить за рамки класса, то все работает.


 
Alek   (2011-10-29 01:33) [1]

Спасибо.. нашел)


 
Alek   (2011-10-29 10:03) [2]

Хотя нет.. не нашел...

Думал вот так во:  
Command.ResultCallback := @TTHreadRequestsBrowser.onNavigateComplete;

Но как оказалось когда вызывается калбек и в него передается поинтер... то ссылка теряется :(.
А если все тоже самое но метод калбека вынести за рамки класса.. то все работает.


 
Anatoly Podgoretsky ©   (2011-10-29 10:27) [3]

Что такое Command.ResultCallback?
Какой прототип функции.

Вообще о чем речь?


 
_Юрий   (2011-10-29 10:49) [4]


> Alek   (29.10.11 10:03) [2]


Метод - это на самом деле две ссылки - на код и на данные.
Вы передаете только ссылку на код, данные (Self) теряются.
Это даже видно по синтаксису:

> Command.ResultCallback := @TTHreadRequestsBrowser.onNavigateComplete;

Где тут упоминание экземпляра класса? Нету.


 
Dimka Maslov ©   (2011-10-29 12:33) [5]

Если ResultCallback oбъявлен как function(...) of object c параметрами, такими же как у onNavigateComplete, то:
Command.ResultCallback := Self.onNavigateComplete

Если то нет, то надо трижды подумать, а можно ли вообще так делать.


 
DVM ©   (2011-10-29 22:33) [6]


> Alek   (29.10.11 01:06) 
> Добрый день.
>
> А как правильно передать по ссылке метод класса?
>
> Command.ResultCallback := @Self.onNavigateComplete;
>
> Если метод выносить за рамки класса, то все работает.

Если метод возможно вынести за пределы класса, но не хочется, то определи его как class function static и оставь внутри. Но это будет уже не совсем метод.


 
Alek   (2011-10-30 00:12) [7]

Спасибо.

Добавил к объявлению Command.ResultCallback вот это of object и заработало из класса.


 
Юрий Зотов ©   (2011-10-30 14:02) [8]


> Alek   (30.10.11 00:12) [7]
> Добавил к объявлению Command.ResultCallback вот это of object
> и заработало из класса.

Посмотрите в коде VCL объявление любого события. Это ведь тот же самый callback, по сути своей.

Ну и в справке то же самое глянуть не помешает, для полного понимания.



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

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

Наверх




Память: 0.48 MB
Время: 0.007 c
15-1318947354
И. Павел
2011-10-18 18:15
2012.02.05
Работа с БД в C#


15-1318405047
boriskb
2011-10-12 11:37
2012.02.05
Работа


2-1319991854
Gu
2011-10-30 19:24
2012.02.05
system.pas


2-1319653394
Дмитрий
2011-10-26 22:23
2012.02.05
Проблемы c Firebird


2-1319547859
TKN
2011-10-25 17:04
2012.02.05
Многострочные заголовки DBGrid