|
|
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Я плохо выспался и у меня рябит в глазах или вот такое: Код: pascal 1. 2. 3. 4. 5. это нормально? В смысле того, что не вызывает ошибку? unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TA = class(TObject) private procedure Something; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var a: TA; begin a.Something end; procedure TForm1.FormCreate(Sender: TObject); begin end; { TA } procedure TA.Something; begin ShowMessage('TA.Something'); end; end. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 22:05 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
_Промешан_, вызываемый метод не задействует никаких данных экземпляра класса, поэтому не обращается к неинициализированной памяти, что могло бы вызывать ошибку (ср. классовые методы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 22:09 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
_Промешан_это нормально? В смысле того, что не вызывает ошибку? Это нормально. 1. Компилятор не отслеживает инициализацию 2. В вызываемом методе нет обращения к внутренним полям объекта, потому фиолетово какой Self у него будет Будет метод виртуальным, или работающим с полями - будет и ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 22:14 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. Заменяем на Код: pascal 1. И радуемся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 22:17 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Хотя метод объявлен в секции private и вообще не должен быть доступен для вызова вне класса. Но это так, детали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 22:20 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоХотя метод объявлен в секции private и вообще не должен быть доступен для вызова вне класса. Учи матчасть, студент... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 22:22 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоХотя метод объявлен в секции private и вообще не должен быть доступен для вызова вне класса. Но это так, детали Это особенность Дельфей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 22:28 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
MBo_Промешан_, вызываемый метод не задействует никаких данных экземпляра класса, поэтому не обращается к неинициализированной памяти, что могло бы вызывать ошибку (ср. классовые методы) Ну и как бы нормально, что A <> NIL = TRUE? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 22:29 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
_Промешан_Ну и как бы нормально, что A <> NIL = TRUE? Нормально. Локальные переменные неуправляемых типов не инициализируются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 22:42 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
_Промешан_Ну и как бы нормально, что A <> NIL = TRUE? Да, это же локальная переменная, они не инициализируются автоматически (за исключением строк и т.п.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 22:47 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоХотя метод объявлен в секции private и вообще не должен быть доступен для вызова вне класса. Но это так, детали strict private , если не хочешь дружественную видимость, или как она там называется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2018, 23:06 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
А вот интересная вещь творится, потому как VCL пистрит именно private секциями которыми в будущем нельзя воспользоваться. К примеру TLanguages,...,TMonitor Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: pascal 1. 2. Нельзя получить доступ к этим функциям, даже если создать TMonitor отдельно ... Может тогда существует отдельная опция ? Включающая строгий режим в unit-е ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 00:01 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, класс Б может получить доступ к приватной секции класса А, если он находится в тоже модуле, что и класс А. Даже если они не связаны наследованием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 09:51 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоА вот интересная вещь творится, потому как VCL пистрит именно private секциями которыми в будущем нельзя воспользоваться. Кому нельзя? Соседям по юниту - можно, что и применяют местами. А стороннему коду да, нельзя. На то он и private ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 10:45 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey_Промешан_Ну и как бы нормально, что A <> NIL = TRUE? Нормально. Локальные переменные неуправляемых типов не инициализируются. Каких типов? Можно пример управляемого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 22:57 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
_Промешан_, авторэто нормально? В смысле того, что не вызывает ошибку? важно понимать, что исключение падает только при попытке доступа к данным класса, то есть к сэлфу. здесь доступа к сэлфу нет, соответственно всё работает нормально. непосредственно вызов метода у класса не приводит к проблемам, пока нет попытки доступа к сэлфу. более того - внутри метода можно проверить - создан ли сэлф или нет и если нет - то можно просто выйти или что-то вернуть в result. я видел реализации такого в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 23:37 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
_Промешан_Каких типов? Можно пример управляемого? String. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 01:24 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
makhaon...внутри метода можно проверить - создан ли сэлф или нет и если нет... Расскажи, пожалуйста - как это проверить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 01:51 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоА вот интересная вещь творится, потому как VCL пистрит именно private секциями которыми в будущем нельзя воспользоваться. К примеру TLanguages,...,TMonitor Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: pascal 1. 2. Нельзя получить доступ к этим функциям, даже если создать TMonitor отдельно ... Может тогда существует отдельная опция ? Включающая строгий режим в unit-е ? Зачем обращаться GetTop, если нужно делать так Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 08:04 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
авторчто исключение падает только при попытке доступа к данным класса, то есть к сэлфу. здесь доступа к сэлфу нет, А разве ссылка на Self не передается как неявный параметр всегда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 09:35 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
BeltarА разве ссылка на Self не передается как неявный параметр всегда? Передается, но не проверяется на валидность же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 10:43 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Beltar, передаётся. если сэлфа нет, передастся как раз nil. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 11:58 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
DimaBr, Тут смысл никак нужно, а то что это невозможно, по возможности возможно с той же дверью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 11:59 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эраmakhaon...внутри метода можно проверить - создан ли сэлф или нет и если нет... Расскажи, пожалуйста - как это проверить? Как ни странно: if self = nil then ... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 12:00 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
_Промешан_Каких типов? Можно пример управляемого? Управляемые: строки, дин.массивы, интерфейсы, варианты (с ARC ещё и объекты). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 12:49 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
makhaonФэйтл Эрапропущено... Расскажи, пожалуйста - как это проверить? Как ни странно: if self = nil then ... :) Да неужели? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 12:50 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
FreeAndNil в помощь. Ну а любителям хранения зомби-ссылок никто уже не поможет. Ни тут ни вообще :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 14:13 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
makhaonFreeAndNil в помощьНе спасет от неинициализированной переменной Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 15:30 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эраmakhaon...внутри метода можно проверить - создан ли сэлф или нет и если нет... Расскажи, пожалуйста - как это проверить? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 16:10 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, спасёт. если инициализировать нилом. Квейд, собственно, да... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 17:10 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
makhaon_Vasilisk_, спасёт. если инициализировать нилом. ... Каким образом неинициализированному объекту можно установить значение свойства (Self)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 21:42 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эраmakhaon_Vasilisk_, спасёт. если инициализировать нилом. ... Каким образом неинициализированному объекту можно установить значение свойства (Self)? Дело в том, что это "волшебное" свойство, оно является значением содержимого переменной классового типа, а не свойством экземпляра объекта. То есть, неинициализированный указатель не будет nil. И, чтобы понять, что класс не был создан, переменную класса следует сперва инициализировать нилом... как-то не очень умно? :) Но этот фокус с self никак не поможет в случае использования алиасов (когда две переменные по дизайну указывают на один объект) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 22:26 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эра, А ты не бери прямой адрес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 00:47 |
|
||
|
Выполнение без ошибки.
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эраmakhaon_Vasilisk_, спасёт. если инициализировать нилом. ... Каким образом неинициализированному объекту можно установить значение свойства (Self)? mc := nil; рекомендую взять отладчик и посмотреть, там всё отлично видно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 01:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2040059]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 205ms |
| total: | 503ms |

| 0 / 0 |
