Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 80 81 [82] 83 84 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1216
,
|
|
|
|
Цитата Повстанець @ Кстати. Почему объект должен следить за историей своих состояний так и не объяснили... почему человек должен помнить, что с ним произошло пять минут назад? год назад? пятьдесят лет назад? это конечно не значит, что каждый объект должен иметь память, но суть твоей претензии мне не понятна. или это не претензия, а просто вопрос? Добавлено Цитата KILLER @ Цитата korvin @ я понимаю претензии к возможности вызывать методы в конструкторе, но вызывать метод объекта до того как он начал создаваться -- это как-то совсем нелепо. по схожим причинам нет и AfterDestrution. впрочем было бы удобно, если бы таки можно было задавать такие методы, только без доступа к самому объекту в них. другие методы часто имеют обе Before- и After- комбинации Я выше, сразу перед этим твоим сообщением запостил ссылку - там дан ответ на твой вопрос эээ... я ничего не спрашивал про After- и Before- |
|
Сообщ.
#1217
,
|
|
|
|
Цитата korvin @ впрочем было бы удобно, если бы таки можно было задавать такие методы, только без доступа к самому объекту в них. А это можно в принципе NewInstance - вызывается до конструирования. Это классовый метод, доступ только к классу. После уничтожения и без доступа к объекту - тоже можно при желании. Перекрываем FreeInstance (вызывается после деструктора, освобождает память объекта. Тоже виртуальный) и из него дергаем свой классовый метод AfterDestruction. |
|
Сообщ.
#1218
,
|
|
|
|
Цитата korvin @ эээ... я ничего не спрашивал про After- и Before- Ну я так, на всякий случай, вдруг спрашивал |
|
Сообщ.
#1219
,
|
|
|
|
Цитата korvin @ Т.е. если бы ты писал модель человека, он бы представлял из себя единственный объект? Может всё таки систему какую то? Не?почему человек должен помнить, что с ним произошло пять минут назад? год назад? пятьдесят лет назад? Цитата korvin @ Можешь и как вопрос воспринимать. или это не претензия, а просто вопрос? |
|
Сообщ.
#1220
,
|
|
|
|
Я не уверен, что без дженериков такое можно сделать в c#, хоть информация о типе и есть, но нет виртуального NewInstance Если GetInstance вызывается первый раз, то цепочка такая: - вызывается NewInstance - FindInstance озвращает nil - раз так, то выделяется память, вызывается конструктор Create, переопределенный в потомке - экземпляр регистрируется если не в первый раз, то - вызывается NewInstance - FindInstance озвращает экземпляр - больше ничего не вызывается (точнее вызывается метод GetInstance который ничего не делает. inherited Create внутри него - это просто перестраховка, конструктор Create класса TObject - пустой, но вызывать рекомендуется на всякий случай - вдруг в будущих версиях что-то изменится) |
|
Сообщ.
#1221
,
|
|
|
|
Цитата D_KEY @ У меня вопрос по твоей реализации. Разве после GetInstance не будет вызван конструктор? То есть ну будет ли вызван повторно конструктор для уже существующего объекта? ![]() ![]() class function TSingleton.NewInstance: TObject; begin Result := FindInstance; if Result = nil then begin Result := inherited NewInstance; TSingleton(Result).Create; RegisterInstance(TSingleton(Result)); end; end; |
|
Сообщ.
#1222
,
|
|
|
|
Цитата --Ins-- @ Цитата korvin @ впрочем было бы удобно, если бы таки можно было задавать такие методы, только без доступа к самому объекту в них. А это можно в принципе NewInstance - вызывается до конструирования. Это классовый метод, доступ только к классу. После уничтожения и без доступа к объекту - тоже можно при желании. Перекрываем FreeInstance (вызывается после деструктора, освобождает память объекта. Тоже виртуальный) и из него дергаем свой классовый метод AfterDestruction.Вот тут, наверно, соглашусь. А вот виртуальность объектов в конструкторах и деструкторах - отвратительная штука |
|
Сообщ.
#1223
,
|
|
|
|
Цитата Повстанець @ Т.е. если бы ты писал модель человека, он бы представлял из себя единственный объект? Может всё таки систему какую то? Не? в каком смысле "единственный объект"? синглетон? с чего б вдруг? при чем тут система? система внутренних органов? |
|
Сообщ.
#1224
,
|
|
|
|
Цитата DesweR @ Цитата D_KEY @ У меня вопрос по твоей реализации. Разве после GetInstance не будет вызван конструктор? То есть ну будет ли вызван повторно конструктор для уже существующего объекта? ![]() ![]() class function TSingleton.NewInstance: TObject; begin Result := FindInstance; if Result = nil then begin Result := inherited NewInstance; TSingleton(Result).Create; RegisterInstance(TSingleton(Result)); end; end; То есть в NewInstance мы именно полностью создаем объект. Ясно. |
|
Сообщ.
#1225
,
|
|
|
|
Цитата D_KEY @ о есть в NewInstance мы именно полностью создаем объект. Ясно. Тут ключевой момент в том, что конструктор GetInstance после NewInstance хоть и вызывеется, но он ничего не делает. Он пустой. А реально что-то делающий конструктор Create вызывается только однажды |
|
Сообщ.
#1226
,
|
|
|
|
Цитата korvin @ Любишь ты, дурачка включать. Я спрашиваю, почему к объекту прилепили ещё какое то левое состояние, которое не учавствует в описании этого объекта, но тем не менее доступно извне. в каком смысле "единственный объект"? синглетон? с чего б вдруг? при чем тут система? система внутренних органов? |
|
Сообщ.
#1227
,
|
|
|
|
Цитата Повстанець @ Т.е. если бы ты писал модель человека, он бы представлял из себя единственный объект? Может всё таки систему какую то? Не? Ответь мне, кто управляет процессом биения твоего сердца? Ты разве сам ежесекундно заставляешь сокращаться собственную сердечную мышцу? |
|
Сообщ.
#1228
,
|
|
|
|
Цитата --Ins-- @ Я не уверен, что без дженериков такое можно сделать в c#, хоть информация о типе и есть, но нет виртуального NewInstance Надо спросить у того, кто этот самый шарп знает на достаточном уровне. Цитата Если GetInstance вызывается первый раз, то цепочка такая: - вызывается NewInstance - FindInstance озвращает nil - раз так, то выделяется память, вызывается конструктор Create, переопределенный в потомке - экземпляр регистрируется если не в первый раз, то - вызывается NewInstance - FindInstance озвращает экземпляр - больше ничего не вызывается (точнее вызывается метод GetInstance который ничего не делает. inherited Create внутри него - это просто перестраховка, конструктор Create класса TObject - пустой, но вызывать рекомендуется на всякий случай - вдруг в будущих версиях что-то изменится) Я уже понял, спасибо Без шаблонов не сделать, пожалуй. Если только с небольшим уровнем хаков через operator new. Но там будет проблема с вызовом конструктора, да. С шаблонами, думаю, можно Добавлено Цитата --Ins-- @ Цитата D_KEY @ о есть в NewInstance мы именно полностью создаем объект. Ясно. Тут ключевой момент в том, что конструктор GetInstance после NewInstance хоть и вызывеется, но он ничего не делает. Он пустой. А реально что-то делающий конструктор Create вызывается только однажды Очень похоже на хак, все-таки Но я не Delphi'ец, а в данном случае дело именно в языке. |
|
Сообщ.
#1229
,
|
|
|
|
Цитата Повстанець @ Любишь ты, дурачка включать. Я спрашиваю, почему к объекту прилепили ещё какое то левое состояние, которое не учавствует в описании этого объекта, но тем не менее доступно извне. оно участвует в его поведении. память для человека -- левое состояние? а то что доступно извне, почему человек не может расказать, что с ним было вчера, если его попросят? |
|
Сообщ.
#1230
,
|
|
|
|
Цитата korvin @ Цитата Повстанець @ Любишь ты, дурачка включать. Я спрашиваю, почему к объекту прилепили ещё какое то левое состояние, которое не учавствует в описании этого объекта, но тем не менее доступно извне. оно участвует в его поведении. память для человека -- левое состояние? а то что доступно извне, почему человек не может расказать, что с ним было вчера, если его попросят? Вообще мне сложно представить себе документ, который сам расскажет мне об изменениях, которые я в нем делал |