На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 80 81 [82] 83 84 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата Повстанець @
    Кстати. Почему объект должен следить за историей своих состояний так и не объяснили...

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

    это конечно не значит, что каждый объект должен иметь память, но суть твоей претензии мне не понятна. или это не претензия, а просто вопрос?

    Добавлено
    Цитата KILLER @
    Цитата korvin @
    я понимаю претензии к возможности вызывать методы в конструкторе, но вызывать метод объекта до того как он начал создаваться -- это как-то совсем нелепо. по схожим причинам нет и AfterDestrution.
    впрочем было бы удобно, если бы таки можно было задавать такие методы, только без доступа к самому объекту в них.

    другие методы часто имеют обе Before- и After- комбинации

    Я выше, сразу перед этим твоим сообщением запостил ссылку - там дан ответ на твой вопрос

    эээ... я ничего не спрашивал про After- и Before-
    Сообщение отредактировано: korvin -
      Цитата korvin @
      впрочем было бы удобно, если бы таки можно было задавать такие методы, только без доступа к самому объекту в них.


      А это можно в принципе :) NewInstance - вызывается до конструирования. Это классовый метод, доступ только к классу. После уничтожения и без доступа к объекту - тоже можно при желании. Перекрываем FreeInstance (вызывается после деструктора, освобождает память объекта. Тоже виртуальный) и из него дергаем свой классовый метод AfterDestruction.
        Цитата korvin @
        эээ... я ничего не спрашивал про After- и Before-

        Ну я так, на всякий случай, вдруг спрашивал :blush:
          Цитата korvin @
          почему человек должен помнить, что с ним произошло пять минут назад? год назад? пятьдесят лет назад?
          Т.е. если бы ты писал модель человека, он бы представлял из себя единственный объект? Может всё таки систему какую то? Не?
          Цитата korvin @
          или это не претензия, а просто вопрос?
          Можешь и как вопрос воспринимать.
            Цитата D_KEY @
            что в С++ не храниться такая информация о типе во время выполнения.


            Я не уверен, что без дженериков такое можно сделать в c#, хоть информация о типе и есть, но нет виртуального NewInstance

            Цитата D_KEY @
            Разве после GetInstance не будет вызван конструктор?


            Если GetInstance вызывается первый раз, то цепочка такая:
            - вызывается NewInstance
            - FindInstance озвращает nil
            - раз так, то выделяется память, вызывается конструктор Create, переопределенный в потомке
            - экземпляр регистрируется
            если не в первый раз, то
            - вызывается NewInstance
            - FindInstance озвращает экземпляр
            - больше ничего не вызывается (точнее вызывается метод GetInstance который ничего не делает. inherited Create внутри него - это просто перестраховка, конструктор Create класса TObject - пустой, но вызывать рекомендуется на всякий случай - вдруг в будущих версиях что-то изменится)
              Цитата D_KEY @
              У меня вопрос по твоей реализации. Разве после GetInstance не будет вызван конструктор? То есть ну будет ли вызван повторно конструктор для уже существующего объекта?

              ExpandedWrap disabled
                class function TSingleton.NewInstance: TObject;
                begin
                  Result := FindInstance;
                  if Result = nil then begin
                    Result := inherited NewInstance;
                    TSingleton(Result).Create;
                    RegisterInstance(TSingleton(Result));
                  end;
                end;
                Цитата --Ins-- @
                Цитата korvin @
                впрочем было бы удобно, если бы таки можно было задавать такие методы, только без доступа к самому объекту в них.


                А это можно в принципе :) NewInstance - вызывается до конструирования. Это классовый метод, доступ только к классу. После уничтожения и без доступа к объекту - тоже можно при желании. Перекрываем FreeInstance (вызывается после деструктора, освобождает память объекта. Тоже виртуальный) и из него дергаем свой классовый метод AfterDestruction.

                Вот тут, наверно, соглашусь. А вот виртуальность объектов в конструкторах и деструкторах - отвратительная штука :)
                  Цитата Повстанець @
                  Т.е. если бы ты писал модель человека, он бы представлял из себя единственный объект? Может всё таки систему какую то? Не?

                  в каком смысле "единственный объект"? синглетон? с чего б вдруг?
                  при чем тут система? система внутренних органов?
                    Цитата DesweR @
                    Цитата D_KEY @
                    У меня вопрос по твоей реализации. Разве после GetInstance не будет вызван конструктор? То есть ну будет ли вызван повторно конструктор для уже существующего объекта?

                    ExpandedWrap disabled
                      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 мы именно полностью создаем объект. Ясно.
                      Цитата D_KEY @
                      о есть в NewInstance мы именно полностью создаем объект. Ясно.


                      Тут ключевой момент в том, что конструктор GetInstance после NewInstance хоть и вызывеется, но он ничего не делает. Он пустой. А реально что-то делающий конструктор Create вызывается только однажды
                        Цитата korvin @
                        в каком смысле "единственный объект"? синглетон? с чего б вдруг?
                        при чем тут система? система внутренних органов?
                        Любишь ты, дурачка включать. Я спрашиваю, почему к объекту прилепили ещё какое то левое состояние, которое не учавствует в описании этого объекта, но тем не менее доступно извне.
                          Цитата Повстанець @
                          Т.е. если бы ты писал модель человека, он бы представлял из себя единственный объект? Может всё таки систему какую то? Не?

                          Ответь мне, кто управляет процессом биения твоего сердца? Ты разве сам ежесекундно заставляешь сокращаться собственную сердечную мышцу?
                            Цитата --Ins-- @
                            Цитата D_KEY @
                            что в С++ не храниться такая информация о типе во время выполнения.


                            Я не уверен, что без дженериков такое можно сделать в c#, хоть информация о типе и есть, но нет виртуального NewInstance

                            Надо спросить у того, кто этот самый шарп знает на достаточном уровне.


                            Цитата
                            Цитата D_KEY @
                            Разве после GetInstance не будет вызван конструктор?


                            Если GetInstance вызывается первый раз, то цепочка такая:
                            - вызывается NewInstance
                            - FindInstance озвращает nil
                            - раз так, то выделяется память, вызывается конструктор Create, переопределенный в потомке
                            - экземпляр регистрируется
                            если не в первый раз, то
                            - вызывается NewInstance
                            - FindInstance озвращает экземпляр
                            - больше ничего не вызывается (точнее вызывается метод GetInstance который ничего не делает. inherited Create внутри него - это просто перестраховка, конструктор Create класса TObject - пустой, но вызывать рекомендуется на всякий случай - вдруг в будущих версиях что-то изменится)

                            Я уже понял, спасибо :)
                            Без шаблонов не сделать, пожалуй. Если только с небольшим уровнем хаков через operator new. Но там будет проблема с вызовом конструктора, да.
                            С шаблонами, думаю, можно :)

                            Добавлено
                            Цитата --Ins-- @
                            Цитата D_KEY @
                            о есть в NewInstance мы именно полностью создаем объект. Ясно.


                            Тут ключевой момент в том, что конструктор GetInstance после NewInstance хоть и вызывеется, но он ничего не делает. Он пустой. А реально что-то делающий конструктор Create вызывается только однажды

                            Очень похоже на хак, все-таки :)
                            Но я не Delphi'ец, а в данном случае дело именно в языке.
                              Цитата Повстанець @
                              Любишь ты, дурачка включать. Я спрашиваю, почему к объекту прилепили ещё какое то левое состояние, которое не учавствует в описании этого объекта, но тем не менее доступно извне.

                              оно участвует в его поведении. память для человека -- левое состояние? а то что доступно извне, почему человек не может расказать, что с ним было вчера, если его попросят?
                                Цитата korvin @
                                Цитата Повстанець @
                                Любишь ты, дурачка включать. Я спрашиваю, почему к объекту прилепили ещё какое то левое состояние, которое не учавствует в описании этого объекта, но тем не менее доступно извне.

                                оно участвует в его поведении. память для человека -- левое состояние? а то что доступно извне, почему человек не может расказать, что с ним было вчера, если его попросят?

                                Вообще мне сложно представить себе документ, который сам расскажет мне об изменениях, которые я в нем делал ;)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 80 81 [82] 83 84 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.4980 ]   [ 15 queries used ]   [ Generated: 29.07.26, 23:31 GMT ]