|
|
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
Есть тип Код: pascal 1. Есть функция Код: pascal 1. Я вызываю так Код: pascal 1. где IsMyThreadFinished это функция-метод класса. Программа компилируется. Но у меня такое чувство, что есть подводный камень, ибо у определения TFunc<TResult> отсутствует of object. Что скажет общество по этому поводу? When a movie is over, it's a black ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 12:18 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
КвейдЧто скажет общество по этому поводу? У классовых функций нет self. Если, конечно, еще что-нибудь не придумали. Но вообще отладчик - классная штука. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 12:38 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
Квейд, а если написать по другому что нибудь измениться? Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 13:18 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
как объявлена IsMyThreadFinished ? Хотя любом объявлении будет работать такой подход (чуть модифицированный код выше): Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 13:28 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
wadmanКвейдЧто скажет общество по этому поводу? У классовых функций нет self. Если, конечно, еще что-нибудь не придумали. Я написал "функция-метод класса", причем тут классовые функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 13:55 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
Guest2013Квейд, а если написать по другому что нибудь измениться? Код: pascal 1. 2. 3. 4. 5. 6. Так работает, само собой. Но у меня в классе уже есть такая функция, получается, что анонимка просто продублирует функционал. Итак, если я хочу честно передать в SpinUntil функцию-медод класса, должен ли ACondition быть объявлен как Код: pascal 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 13:58 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
КвейдНо у меня такое чувство, что есть подводный камень,Нет. Анонимные функции и методы односторонне совместимы http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Anonymous_Methods_in_Delphi Method references can also be assigned to methods as well as anonymous methods . For example: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. However, the converse is not true: you cannot assign an anonymous method to a regular method pointer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 14:19 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 14:20 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
Квейд, Референсы(лямбды) предполагают в вызове метода применение различных реализаций одной и той же функции. Если в классе реализована всего лишь одна такая функция то референсы теряют смысл применения. В противном случае (если реализаций в классе много) можно например завести переменную референсного типа внутри класса и работать через нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 15:02 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
Guest2013Если в классе реализована всего лишь одна такая функция то референсы теряют смысл применения.Референс могут использовать разные классы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 15:37 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
КвейдПрограмма компилируется. врёшь! или не договариваешь, что Код: pascal 1. у тебя внутри класса где реализована IsMyThreadFinished, а self туда скрыто и заезжает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 17:01 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
wadmanКвейдЧто скажет общество по этому поводу? У классовых функций нет self. Если, конечно, еще что-нибудь не придумали. У статических нет, у классовых - есть и это ClassType (т.е. ссылка на сам класс). Можно например написать: Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2018, 17:48 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
Квейд, +1 alekcvp они ещё и виртуальными могут быть, а это без доп-параметра не сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 08:29 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
КвейдПрограмма компилируется. Но у меня такое чувство, что есть подводный камень, ибо у определения TFunc<TResult> отсутствует of object. Что скажет общество по этому поводу?есть подводный камень При объявлении функции внутри тела (безымянная функция), в созданный интерфейс захватываются локальные переменные. Например, это может привести к неприятным последствиям при использовании самоменеджируемых типов вроде интерфейсов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 08:35 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
[quot kealon(Ruslan)Например, это может привести к неприятным последствиям при использовании самоменеджируемых типов вроде интерфейсов[/quot] Я правильно понимаю, что если в процедуре, где используются безымянные функции, будет переменная типа SomeVar: ISomeIntf; то она, после выхода из процедуры, будет существовать до тех пор пока мы не уничтожим объект, куда назначена безымянная функция? Ну или пока что-то внутри него не занилит ссылку на неё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 10:37 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
alekcvp[quot kealon(Ruslan)Например, это может привести к неприятным последствиям при использовании самоменеджируемых типов вроде интерфейсов Я правильно понимаю, что если в процедуре, где используются безымянные функции, будет переменная типа SomeVar: ISomeIntf; то она, после выхода из процедуры, будет существовать до тех пор пока мы не уничтожим объект, куда назначена безымянная функция? Ну или пока что-то внутри него не занилит ссылку на неё?[/quot] по идее да. Анонимный метод в delphi реализован через интерфейс методом invoke можно даже приводить их между собой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 10:47 |
|
||
|
reference to procedure и метод класса
|
|||
|---|---|---|---|
|
#18+
alekcvpkealon(Ruslan)Например, это может привести к неприятным последствиям при использовании самоменеджируемых типов вроде интерфейсов Я правильно понимаю, что если в процедуре, где используются безымянные функции, будет переменная типа SomeVar: ISomeIntf; то она, после выхода из процедуры, будет существовать до тех пор пока мы не уничтожим объект, куда назначена безымянная функция? Ну или пока что-то внутри него не занилит ссылку на неё?правильно например, проявлялось при использовании метода Synchronize (в 10-ке его исправили) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 10:49 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39681604&tid=2040572]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
85ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 467ms |

| 0 / 0 |
