Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 36 37 [38] 39 40 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#556
,
|
|
|
|
Цитата MyNameIsIgor @ Вот, кстати, в отсутствии const в шарпе геттры делаю не изменяющими состояния объекта - ну, собственно, как свойству и положено ![]() Отсутствие const в языке со статической типизацией я понять не могу в принципе. Цитата Это ООП в то время как метод говорит о том, что он что-то делает |
|
Сообщ.
#557
,
|
|
|
|
Цитата MyNameIsIgor @ Мы отдаём точку (Point) и пользователь хочет изменить у неё одну из координат. это был бы выстрел в воздух... меняешь состояние временного объекта(структуры/записи) |
|
Сообщ.
#558
,
|
|
|
|
Цитата Shaggy @ Цитата MyNameIsIgor @ Мы отдаём точку (Point) и пользователь хочет изменить у неё одну из координат. это был бы выстрел в воздух... меняешь состояние временного объекта(структуры/записи) Но никто же не мешает использовать этот временный объект дальше в выражении. |
|
Сообщ.
#559
,
|
|
|
|
Цитата D_KEY @ Отсутствие const в языке со статической типизацией я понять не могу в принципе. эээ... в хаскелле и окамле нет const. |
|
Сообщ.
#560
,
|
|
|
|
Цитата --Ins-- @ А если свойство имеет классовый тип, мы там не напоримся на очередной сеанс уличной магии? Нет, смотри. Points[0] - это свойство. Ты же хочешь изменить его значение, неважно что частично. Так вот, ты это хочешь сделать в обход сеттера. А если в сеттера дергается что-то важное? Например OnChange или что-то в этом роде. Что же тогда будет? Это только кажется логичным, на самом деле что нельзя - это правильно. Свойство при получении не отдается пользователю на растерзание. Фишка свойств как раз в том, чтобы доступ к данным ОГРАНИЧИТЬ, запретив установку и получение в обход акцессоров |
|
Сообщ.
#561
,
|
|
|
|
Цитата D_KEY @ Но никто же не мешает использовать этот временный объект дальше в выражении. Не мешает, используй. Так можно ![]() ![]() Value := Points[0].X + 10; Так: ![]() ![]() Points[0].X := бла-бла-бла. // Что ты тут дальше использовать будешь то? ;) |
|
Сообщ.
#562
,
|
|
|
|
Собственно тоже цикл. По счётчику цикла получался экземпляр типа-значения. Лямбда захватывала и полученный экземпляр, и счётчик. В результате глубоко в коде, куда отдавалась лямбда, происходила ошибка, т.к. он предполагал равенство захваченного экземпляра и того, что он сам требовал по захваченному счётчику. Как-то так... Проблема в том, что ошибка вылазила не там, где она собственно есть. Понятно объяснил? ![]() Цитата --Ins-- @ Нет, смотри. Points[0] - это свойство. Ты же хочешь изменить его значение, неважно что частично. Так вот, ты это хочешь сделать в обход сеттера. А если в сеттера дергается что-то важное? Например OnChange или что-то в этом роде. Что же тогда будет? Это только кажется логичным, на самом деле что нельзя - это правильно. Свойство при получении не отдается пользователю на растерзание. Фишка свойств как раз в том, чтобы доступ к данным ОГРАНИЧИТЬ, запретив установку и получение в обход акцессоров Мы пытаемся изменить одну из координат. Так вот как раз на неё нет никакого сеттера. Если он нужен, то надо координаты в точке делать не публичными полями, а свойствами. Цитата Shaggy @ это был бы выстрел в воздух... меняешь состояние временного объекта(структуры/записи) Да понимаю я всё. Мне просто кажется нелогичным такой интерфейс. Просто есть мысли как сделать это работающим, но возникает вопрос: а оно мне надо? Вывод: нет, не надо. |
|
Сообщ.
#563
,
|
|
|
|
Цитата D_KEY @ Но никто же не мешает использовать этот временный объект дальше в выражении. ты не понял, тебе отдали копию, полученный объект с хранилищем уже не связан сохрани в переменной и используй |
|
Сообщ.
#564
,
|
|
|
|
Цитата Повстанець @ А если свойство имеет классовый тип, мы там не напоримся на очередной сеанс уличной магии? Что ты подразумеваешь под уличной магией? |
|
Сообщ.
#565
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ Отсутствие const в языке со статической типизацией я понять не могу в принципе. эээ... в хаскелле и окамле нет const. Я имел в виду семантику, а не синтаксис Добавлено Цитата --Ins-- @ Цитата D_KEY @ Но никто же не мешает использовать этот временный объект дальше в выражении. Не мешает, используй. Так можно ![]() ![]() Value := Points[0].X + 10; Так: ![]() ![]() Points[0].X := бла-бла-бла. // Что ты тут дальше использовать будешь то? ;) Я наверно не так понял, что имелось в виду |
|
Сообщ.
#566
,
|
|
|
|
Цитата MyNameIsIgor @ Мы пытаемся изменить одну из координат. Так вот как раз на неё нет никакого сеттера. Но ведь на его контейнер (Point) сеттер есть. А что будет если мы должны получать уведомления об изменениях. И в сеттере Point у нас соответствующий код дергается. Ты уверен, что было бы правильно разрешить просто тихо изменить значение одной из координат? Я вот не уверен Цитата MyNameIsIgor @ Если он нужен, то надо координаты в точке делать не публичными полями, а свойствами. Да, так и нужно |
|
Сообщ.
#567
,
|
|
|
|
Цитата --Ins-- @ Цитата Повстанець @ А если свойство имеет классовый тип, мы там не напоримся на очередной сеанс уличной магии? Что ты подразумеваешь под уличной магией? ![]() То, что мы получим ссылку на объект(ведь так?), а не копию. Кстати, сможем ли мы поменять состояние это объекта через вызов метода? Если да, то о какой инкапсуляции может идти речь? |
|
Сообщ.
#568
,
|
|
|
|
Цитата D_KEY @ Кстати, сможем ли мы поменять состояние это объекта через вызов метода? Конечно сможем ![]() Цитата D_KEY @ Если да, то о какой инкапсуляции может идти речь? А че не так-то? |
|
Сообщ.
#569
,
|
|
|
|
Цитата --Ins-- @ Но ведь на его контейнер (Point) сеттер есть. А что будет если мы должны получать уведомления об изменениях. И в сеттере Point у нас соответствующий код дергается. Ты уверен, что было бы правильно разрешить просто тихо изменить значение одной из координат? Вообще, да, уверен, потому что при ![]() ![]() point.X := 10; никто никаких уведомлений не получает. Так отчего же их кто-то должен получать при таком коде? ![]() ![]() rect.Points[0].X := 10; И почему этот код не должен работать? Он должен работать и изменять соответствующий rect. Это если по-правильному... |
|
Сообщ.
#570
,
|
|
|
|
Form.ActiveControl := Panel;
и Form.ActiveControl.Visible := False; Где тут нарушение инкапсуляции? |