|
Сериализация
|
|||
---|---|---|---|
#18+
Как сериализовать статический класс (если вообще возможно)? Статический класс представляет собой настройки приложения. Значения его полей должны быть доступны в любом месте приложения без создания объекта класса. Я понимаю, что сериализуется именно объект, а не сам класс. Но как-то же идет сериализация настроек Properties.Settings.Default в C# и My.Settings в VB... Я попытался разобраться в классе Properties.Settings.Default - но не осилил. "Пока что сериализую настройки так:" Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91.
Сериализация: Код: c# 1.
Но обратится напрямую к свойствам без создания объекта уже нельзя =( Код: c# 1.
Если свойствам назначить модификатор static. обращаться без объекта можно, но эти свойства не сериализуются. Если объявить класс как static, то десериализация не получается - нельзя конвертнуть к статическому типу. Подскажите хотя бы в каком направлении копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 16:30 |
|
Сериализация
|
|||
---|---|---|---|
#18+
NickopollКак сериализовать статический класс (если вообще возможно)? Никак. Только обходными путями, типа рефлексией собрать свойства и их значения и сериализовать object[,], потом распрасить обратно. Но всё это от лукавого. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 16:43 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Я нашел было упоминание, что может помочь DataTable + Base64, но так и не понял, как. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 16:49 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Способов много, но все они через зад. Статика зло, перепиши на нормальный класс и больше так не делай. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 16:50 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Да я бы с радостью не использовал статические данные. Но я понятия не имею. как еще можно реализовать поставленную задачу... Разве что при каждом обращении к настройке каждый раз считывать ее значение с файла. Но здесь много лишних телодвижений, как мне кажется. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 16:57 |
|
Сериализация
|
|||
---|---|---|---|
#18+
NickopollДа я бы с радостью не использовал статические данные. Но я понятия не имею. как еще можно реализовать поставленную задачу... Разве что при каждом обращении к настройке каждый раз считывать ее значение с файла. Но здесь много лишних телодвижений, как мне кажется. А в чем проблема? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 17:01 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Вот блин. Я чет не допер. Настроился на нечто сложное и не вразумительное. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 17:08 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Рано радовался =( cooldeveloper Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Таким способом настройки никуда не сохраняются без объекта и без статических переменных. То есть, Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 21:14 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Предполагается, что возвращаются значения из хранилища настроек, а не константы, забитые в исходник. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 21:34 |
|
Сериализация
|
|||
---|---|---|---|
#18+
NickopollТаким способом настройки никуда не сохраняются без объекта и без статических переменных. То есть, Код: c# 1. 2.
Садись, двойка. Это 2 абсолютно разных объекта. Код: c# 1. 2. 3. 4.
Срочно учить матчасть. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 21:56 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Топикстартер, прочитай про шаблон singleton. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 22:12 |
|
Сериализация
|
|||
---|---|---|---|
#18+
cooldeveloperNickopollДа я бы с радостью не использовал статические данные. Но я понятия не имею. как еще можно реализовать поставленную задачу... Разве что при каждом обращении к настройке каждый раз считывать ее значение с файла. Но здесь много лишних телодвижений, как мне кажется. А в чем проблема? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
wtf? видимо и впрямь не муся ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 02:15 |
|
Сериализация
|
|||
---|---|---|---|
#18+
cooldeveloperNickopollТаким способом настройки никуда не сохраняются без объекта и без статических переменных. То есть, Код: c# 1. 2.
Садись, двойка. Это 2 абсолютно разных объекта. Я понимаю, что это разные объекты. потому и говорю, что не подходит способ. cooldeveloper Код: c# 1. 2. 3. 4.
Опять же создание объекта... JohnSparrow Топикстартер, прочитай про шаблон singleton. Да, я в немного знаю о синглтоне, но поначалу сомневался. что он мне поможет. Все же пораскинул чуть мозгой - и проблему решил именно синглтоном. Всем спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 09:35 |
|
Сериализация
|
|||
---|---|---|---|
#18+
NickopollЯ понимаю, что это разные объекты. потому и говорю, что не подходит способ. Не понял, чем не подходит? NickopollОпять же создание объекта... Представь себе, всё в дотнете устроено на созданиях объектах P.S. В чем сложности-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 10:11 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Представь, я понимаю, что все завязано на объекта, и, как мне кажется, не только в дотнете... А не подходит тем, что в твоем варианте необходимо создание объекта класса Settings каждый раз, когда необходимо считать/записать какую-либо настройку. Мне же нужно, чтобы существовал максимум один объект на все приложение, был доступен в любом месте и был единожды инициализирован. Потому я ничего лучшего, чем синглетон, не придумал. Вот, что я получил Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Использование: Код: c# 1. 2.
Вот этого я и добивался. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 10:39 |
|
Сериализация
|
|||
---|---|---|---|
#18+
NickopollА не подходит тем, что в твоем варианте необходимо создание объекта класса Settings каждый раз, когда необходимо считать/записать какую-либо настройку. Ну так кешируй, если нужно считать только один раз. Причем тут сам класс? Класс описал, а инструмент, который с ним работает, кеширует, сериализует и т.д. - это уже другая композиция. Учи матчасть что-ле. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 10:45 |
|
Сериализация
|
|||
---|---|---|---|
#18+
А надо было написать пару строк кода-то... Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
P.S. Но, вообще, все эти синглтоны - зло. Класс - для описания , логика работы (вычитывание из конфига, кеширование и т.д.) - другой независимый класс . ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 10:48 |
|
Сериализация
|
|||
---|---|---|---|
#18+
cooldeveloper логика работы (вычитывание из конфига, кеширование и т.д.) - другой независимый класс Вот тут недопонял. Имеется ввиду, абстрактные классы и реализация их методов в дочерних? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 11:05 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Nickopollcooldeveloper логика работы (вычитывание из конфига, кеширование и т.д.) - другой независимый класс Вот тут недопонял. Имеется ввиду, абстрактные классы и реализация их методов в дочерних? Код: c# 1. 2. 3. 4. 5. 6. 7.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Ты получаешь и сериализацию, и отдельную независимую логику чтения настроек. Нужно будет что-то еще, напишешь еще отдельный класс, который может работать с Store. Ну что непонятно-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 11:16 |
|
Сериализация
|
|||
---|---|---|---|
#18+
cooldeveloperПредставь себе, всё в дотнете устроено на созданиях объектах Код: c# 1.
Это тоже? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 11:22 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Дык, а мне и не нужно в данном приложении разбивать один класс на два. Это не какой-то архипорект и подобные действия не целесообразны в данном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 11:34 |
|
Сериализация
|
|||
---|---|---|---|
#18+
ЕвгенийВcooldeveloperПредставь себе, всё в дотнете устроено на созданиях объектах Код: c# 1.
Это тоже? Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 11:36 |
|
Сериализация
|
|||
---|---|---|---|
#18+
NickopollДык, а мне и не нужно в данном приложении разбивать один класс на два. Это не какой-то архипорект и подобные действия не целесообразны в данном случае. Декомпозиция целесообразна всегда вне зависимости от масштаба проекта. Пихать всё в единственный класс карается законом о гавнокоде. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 11:38 |
|
Сериализация
|
|||
---|---|---|---|
#18+
cooldeveloperNickopollДык, а мне и не нужно в данном приложении разбивать один класс на два. Это не какой-то архипорект и подобные действия не целесообразны в данном случае. Декомпозиция целесообразна всегда вне зависимости от масштаба проекта. Пихать всё в единственный класс карается законом о гавнокоде. Исходя из твоей логики, целесообразно каждую переменную распихать по отдельным классам и это говнокодом считаться не будет... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 11:42 |
|
Сериализация
|
|||
---|---|---|---|
#18+
NickopollИсходя из твоей логики, целесообразно каждую переменную распихать по отдельным классам и это говнокодом считаться не будет... Не вижу корреляции между декомпозицией задач описания и задач логики. Шагом марш читать Application Architecture Guide от MS. Глава Объектно-ориентированная архитектура, она тебе расскажет, что такое абстракция, композиция, наследование, инкапсуляция, полиморфизм и отделение. Там же ты узнаешь, что такое понятность, возможность повторного использования, тестируемость, расширяемость и высокая связность. А пока присаживайся, двойка. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 11:48 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Да при чем здесь определения вышеизложенных понятий? Я говорю о том, что в моем приложении нет нужды в декомпозиции, тобой описанной. И я не вижу ни одной причины, почему это должно называться говнокодом. У меня в этом классе сидят только поле _Instance и проперти. Сериализацию/десериализацию я вынес в отдельный класс, в котором собраны все сериализации/десериализации для остальных классов. Разбивать класс еще больше - бред. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 12:12 |
|
Сериализация
|
|||
---|---|---|---|
#18+
NickopollДа при чем здесь определения вышеизложенных понятий? Вышеизложенные "понятия" дают понимание, почему каша, которую ты делаешь, является помойкой. NickopollЯ говорю о том, что в моем приложении нет нужды в декомпозиции, тобой описанной. 1. Во-первых, не важно, если ли нужна или нет, писать так как ты пишешь - уже означает, что делаешь ты чрезвычайно плохо. 2. Во-вторых, декомпозиция таки тебе нужна - сериализация, ты же сам начал плакать, что не можешь сериализовать свой статический гавнокласс. 3. В-третьих, закладывать логику сериализации в прикладной бизнес класс, как это сделал ты в сабже - безумное УГ, не поддающееся здравому смыслу. Ты будешь дублировать это во всех классах, в которых требуется сериализация? 4. Заколадывать логику сериализации / десериализации в класс нужно только тогда, когда хочешь переопределить поведения сериалайзера IXmlSerializable. Например, тут добавляются комментарии к атрибутам. И то, нужно сделать отдельную обертку над бизнес-классом для таких манипуляций. NickopollИ я не вижу ни одной причины, почему это должно называться говнокодом. Я тебе назвал уже 100500 причин, почему твои жалкие потуги - унылый гавнокод. Если трудности с пониманием, можешь в сад сходить, там объяснят понятнее, чем я. NickopollУ меня в этом классе сидят только поле _Instance и проперти. Сериализацию/десериализацию я вынес в отдельный класс, в котором собраны все сериализации/десериализации для остальных классов. Разбивать класс еще больше - бред. Если по твоей логике генерировались бы классы для Entity Framework или Linq to SQL, то мир бы уже содрогнулся от ужаса. Но не тут-то было, разработчики MS вполне адекватные люди и не будут пихать гавностатику с логикой куда ни попадя. Есть бизнес классы и есть умный датаконтекст. И точка. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 12:22 |
|
Сериализация
|
|||
---|---|---|---|
#18+
cooldeveloperЕвгенийВпропущено... Код: c# 1.
Это тоже? Да. В каком месте? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 12:34 |
|
Сериализация
|
|||
---|---|---|---|
#18+
ЕвгенийВВ каком месте? Math - это статический класс. Тебе предоставить RTFM по статическим классам и рассказать, как они работают? Всегда пожалуйста: ... http://msdn.microsoft.com/ru-ru/library/79b3xss3.aspx Статический класс в основном такой же, что и нестатический класс, но имеется одно отличие: нельзя создавать экземпляры статического класса. http://msdn.microsoft.com/ru-ru/library/79b3xss3.aspx Как и в случае с типами всех классов сведения о типе для статического класса загружаются средой CLR .NET Framework, когда загружается программа, которая ссылается на класс. Программа не может точно указать, когда загружается класс. Но гарантируется загрузка этого класса, инициализация его полей и вызов статического конструктора перед первым обращением к классу в программе. http://msdn.microsoft.com/ru-ru/library/79b3xss3.aspx Хотя поле, не может быть объявлено как static const, поле const по своему поведению является статическим. Оно относится к типу, а не к экземплярам типа. Поэтому к полям const можно обращаться с использованием той же нотации ClassName.MemberName, что и используемой для статических полей. Необходим экземпляр объекта. Когда возьмешься за голову, начнешь думать и читать документацию? Не первый раз тебе об этом говорю уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 12:39 |
|
Сериализация
|
|||
---|---|---|---|
#18+
cooldeveloper Why Singletons are Evil Well used singletons are GOOD! зы: Полностью не читал, просто название статьи понравилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 12:46 |
|
Сериализация
|
|||
---|---|---|---|
#18+
Алексей Кcooldeveloper Why Singletons are Evil Well used singletons are GOOD! зы: Полностью не читал, просто название статьи понравилось. Глянь на название домена в твоей ссылке, должно отпугнуть :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 12:54 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1404790]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 313ms |
total: | 481ms |
0 / 0 |