Login
Веселая фича
NEW 15.01.13 11:07
Веселая фича
имеем следующую конструкцию:
private static string DefaultCstFolder = TTemplatesDll.TemplateDir;
TTemplatesDll - синглетон
TemplateDir - проперть, контролирующая доступ к полю. Проперть критична и потому отслеживает ситуацию с своей инициализацией - выкидывае Ехцептион если что не так. Инициализация происходит в начале.
Вопрос - Каким образом она может оказаться НЕ инициализированной в средине выполнения программы, когда инициализация DefaultCstFolder уже давно позади?
имеем следующую конструкцию:
private static string DefaultCstFolder = TTemplatesDll.TemplateDir;
TTemplatesDll - синглетон
TemplateDir - проперть, контролирующая доступ к полю. Проперть критична и потому отслеживает ситуацию с своей инициализацией - выкидывае Ехцептион если что не так. Инициализация происходит в начале.
Вопрос - Каким образом она может оказаться НЕ инициализированной в средине выполнения программы, когда инициализация DefaultCstFolder уже давно позади?

NEW 16.01.13 00:07
in Antwort Murr 15.01.13 11:07
CLR всего лишь гарантирует, что инициализация статического члена произойдёт до его первого использования. Ты уверен, что использование имело место быть? ;-)
NEW 16.01.13 00:25
in Antwort Posmotrim 16.01.13 00:07
NEW 16.01.13 01:56
По-русски это звучит так пошло...
in Antwort Posmotrim 16.01.13 00:07
В ответ на:
что инициализация статического члена произойдёт до его первого использования
что инициализация статического члена произойдёт до его первого использования
По-русски это звучит так пошло...

NEW 16.01.13 09:53
перед и после первого использования DefaultCstFolder сделать записи в лог.
На основании чего сделан данный вывод? Измени геттер для TemplateDir:
in Antwort Murr 16.01.13 00:23
В ответ на:
Вопрос - Каким образом она может оказаться НЕ инициализированной в средине выполнения программы
Вопрос - Каким образом она может оказаться НЕ инициализированной в средине выполнения программы
перед и после первого использования DefaultCstFolder сделать записи в лог.
В ответ на:
когда инициализация DefaultCstFolder уже давно позади?
когда инициализация DefaultCstFolder уже давно позади?
На основании чего сделан данный вывод? Измени геттер для TemplateDir:
string TemplateDir
{
get
{
log.trace("TemplateDir: 1");
try
{
//перед return:
log.trace("TemplateDir: 2");
}
catch
{
log.trace("TemplateDir: 3");
throw;
}
}
}
что будет в лог файле?
NEW 16.01.13 12:35
даже не хочу знать знать, о чём ты думал в 6-м классе, изучая одночлены и многочлены =))
in Antwort scorpi_ 16.01.13 01:56
В ответ на:
По-русски это звучит так пошло...
По-русски это звучит так пошло...
даже не хочу знать знать, о чём ты думал в 6-м классе, изучая одночлены и многочлены =))
NEW 16.01.13 13:32
in Antwort Posmotrim 16.01.13 09:53
На основании чего сделан данный вывод?
-----
На основании лога. Есть запись об инициализации, есть записи об доступе и в конце есть запись об Ехцептионе...
Не мучайся - в этом коде проблем нет. Проблема есть в другом месте - там создается (не мною) второй инстансе синглетона и он - не инициализирован...
-----
На основании лога. Есть запись об инициализации, есть записи об доступе и в конце есть запись об Ехцептионе...

Не мучайся - в этом коде проблем нет. Проблема есть в другом месте - там создается (не мною) второй инстансе синглетона и он - не инициализирован...

NEW 16.01.13 13:49
ну так ССЗБ. приватный конструктор тебе в руки...
in Antwort Murr 16.01.13 13:32
В ответ на:
там создается (не мною) второй инстансе синглетона и он - не инициализирован.
там создается (не мною) второй инстансе синглетона и он - не инициализирован.
ну так ССЗБ. приватный конструктор тебе в руки...
NEW 16.01.13 14:39
in Antwort Posmotrim 16.01.13 13:49
приватный конструктор тебе в руки...
------
Он и так приватный - указано же - синглетон...
ну так ССЗБ.
-----
Скорее - разработчиков Linq надо кормить звиздюлями...
------
Он и так приватный - указано же - синглетон...

ну так ССЗБ.
-----
Скорее - разработчиков Linq надо кормить звиздюлями...
NEW 16.01.13 15:16
in Antwort Murr 16.01.13 14:39
Если конструктор приватный, как был создан второй объект данного класса? И чем тебе насолили создатели линка?
NEW 16.01.13 15:59
in Antwort Posmotrim 16.01.13 15:16
NEW 16.01.13 16:23
Ты не мог бы дать более расширенный ответ, а то я вообще не понимаю твои отрывки фраз :-(
in Antwort Murr 16.01.13 15:59
В ответ на:
Как - это не ко мне, а аккурат к создателям Linq...
Как - это не ко мне, а аккурат к создателям Linq...
Ты не мог бы дать более расширенный ответ, а то я вообще не понимаю твои отрывки фраз :-(
NEW 16.01.13 17:15
in Antwort Posmotrim 16.01.13 16:23
Хммм... Ну хорошо...
Где-то в недрах Linq происходит вызов приватного конструктора TTemplatesDll или класс инстанцируется без вызова.
Причина такого поведения, скорее всего в том, что Linq сам по себе инстанцирует обьекты и делает это где-то в отдельном блоке памяти.
Как результат - там действительно создается другой инстансе singleton'a TTemplatesDll и он непаравильно инициализирован.
Наверное есть какой-то метод как сообщить Linq что ему нужен полный клон обьекта, но мне было лениво копать и обошел по-другому - убрал статику.
Где-то в недрах Linq происходит вызов приватного конструктора TTemplatesDll или класс инстанцируется без вызова.
Причина такого поведения, скорее всего в том, что Linq сам по себе инстанцирует обьекты и делает это где-то в отдельном блоке памяти.
Как результат - там действительно создается другой инстансе singleton'a TTemplatesDll и он непаравильно инициализирован.
Наверное есть какой-то метод как сообщить Linq что ему нужен полный клон обьекта, но мне было лениво копать и обошел по-другому - убрал статику.
NEW 16.01.13 18:11
in Antwort Murr 16.01.13 17:15
а можно привести конструкцию linq, посредством которой
Спасибо.
В ответ на:
происходит вызов приватного конструктора TTemplatesDll или класс инстанцируется без вызова?
происходит вызов приватного конструктора TTemplatesDll или класс инстанцируется без вызова?
Спасибо.
NEW 16.01.13 19:21
in Antwort Posmotrim 16.01.13 18:11
Могу дать завтра. Там удаление из списка.
Но сам код - не принципиален - любой код с использованием Линк будет делать тоже самое...
Но сам код - не принципиален - любой код с использованием Линк будет делать тоже самое...

NEW 16.01.13 19:47
А тебе не кажется что в этом случае это просто не синглетон. Иначе говоря его кривая реализация.
Либо ты еще о чем умалчиваешь....
in Antwort Murr 16.01.13 13:32
В ответ на:
там создается (не мною) второй инстансе синглетона
там создается (не мною) второй инстансе синглетона
А тебе не кажется что в этом случае это просто не синглетон. Иначе говоря его кривая реализация.
Либо ты еще о чем умалчиваешь....
NEW 16.01.13 20:29
in Antwort AlexNek 16.01.13 19:47
А тебе не кажется что в этом случае это просто не синглетон.
-----
Нее, не кажется... TTemplatesDll представляет единственную длл в системе... Мне просто вреден второй экземпляр...
Я так припоминаю, что уже была дискуссия по этому поводу... лет 5-6 назад...
-----
Нее, не кажется... TTemplatesDll представляет единственную длл в системе... Мне просто вреден второй экземпляр...
Я так припоминаю, что уже была дискуссия по этому поводу... лет 5-6 назад...
NEW 16.01.13 21:35
in Antwort Posmotrim 16.01.13 21:14