Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сериализация статического класса 
V
    Опции темы
V0fka
Дата 21.8.2013, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Привет!

Есть статический класс.

Код

internal static class UserSetting
    {
        public static WF.OpenFileDialog openFileDialog;
        public static WF.FolderBrowserDialog folderBrowserDialog;

        static void Save()
        {
            XmlSerializer mySerializer = new XmlSerializer(typeof(UserSetting));
            StreamWriter writer = new StreamWriter("Settings.xml");
            mySerializer.Serialize(writer, this); // тут ошибка
            writer.Close();
        }
    }


И несколько вопросов:
1) в строке, которую я выделил коментом пяовляется ошибка, что писать this нельзя. Есть ли какой-то аналог this-а в статическом классе, т.е. ссылка на сам себя? Или это никому нигде не надо и все пользуются ИмяКласса.ИмяЧлена ?
2) Пробовал вместо this писать UserSetting. Но студия говорит, что UserSetting не является объектом. Я понимаю о чем оно говорит. Можно как-то выйти из положения имея именно статический класс?
3) Имеет ли смысл в статическом классе иметь не статические члены?

Это сообщение отредактировал(а) V0fka - 21.8.2013, 14:47
PM MAIL   Вверх
diadiavova
Дата 21.8.2013, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Во-первых, классы не сериализуются вообще. Сериализуются объекты, объекты являются экземплярами классов, а у статических классов экземпляров не бывает.
Во-вторых, this - не просто ссылка на себя, а ссылка на текущий экземпляр, а у статических классов... ну ты понял smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
V0fka
Дата 21.8.2013, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



В пхп можно обратиться к текущему экземпляру статического класса из самого себя использую ключевое слово self. Думал, может в шарпе что-то такое тоже есть smile . В общем получается, то что я хочу сделать - через статический класс не делается, т.е. надо сделать класс нестатический, создавать его экземпляр и сериализовать, я правильно понял? smile

И если не сложно, на 3-й вопросик бы получить ответ. smile
PM MAIL   Вверх
diadiavova
Дата 21.8.2013, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(V0fka @  21.8.2013,  16:01 Найти цитируемый пост)
В пхп можно обратиться к текущему экземпляру статического класса

Видимо в пхп само понятие статического класса другое. Мне в принципе непонятно почему класс статический, если у него могут быть экземпляры. Если ты объяснишь мотив, по которому решил сделать класс статическим, то может и можно будет что-то придумать.
Цитата(V0fka @  21.8.2013,  16:01 Найти цитируемый пост)
И если не сложно, на 3-й вопросик бы получить ответ.

Нестатические члены могут быть только у экземпляра, а статическй класс ... smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
V0fka
Дата 21.8.2013, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Цитата(diadiavova @  21.8.2013,  15:29 Найти цитируемый пост)
Если ты объяснишь мотив, по которому решил сделать класс статическим, то может и можно будет что-то придумать.

Как видно по названию, это пользовательские настройки. Создавать экземпляры необходимости нету и отовсюду в программе нужно иметь доступ к единственному экземпляру настроек. Поэтому я решил, что это будет статический класс.

Цитата(diadiavova @  21.8.2013,  15:29 Найти цитируемый пост)
Нестатические члены могут быть только у экземпляра, а статическй класс ...

Например, вот так, студия не ругается:

Код

public static class TestClass
    {
        public string test;
    }


Но при попытке обратиться к TestClass.test говорит, что для нестатического своства нужен экземпляр. Те знания, которыми обладаю я, дают мне понять, что к test обратиться невозможно никак и неоткуда. И вопрос состоит в том, что на самом ли деле так, либо я чего-то не знаю? smile 
PM MAIL   Вверх
diadiavova
Дата 21.8.2013, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(V0fka @  21.8.2013,  18:43 Найти цитируемый пост)
Как видно по названию, это пользовательские настройки.

Чем не устраивают стандартные параметры приложения?
http://msdn.microsoft.com/ru-ru/library/bb397750.aspx
http://msdn.microsoft.com/ru-ru/library/a65txexh.aspx

Цитата(V0fka @  21.8.2013,  18:43 Найти цитируемый пост)
Создавать экземпляры необходимости нету и отовсюду в программе нужно иметь доступ к единственному экземпляру настроек. Поэтому я решил, что это будет статический класс.

Тебе нужен не статический класс, а статическое свойство, возвращающее единственный экземпляр класса. Гугли singleton.
Цитата(V0fka @  21.8.2013,  18:43 Найти цитируемый пост)
Например, вот так, студия не ругается:

Я именно об этом и написал. У статического класса могут быть только статические члены, поскольку нестатические члены являются членами экземпляра, которых у статического класса просто не может быть.
Цитата(V0fka @  21.8.2013,  18:43 Найти цитируемый пост)
 И вопрос состоит в том, что на самом ли деле так, либо я чего-то не знаю? 

На самом деле так и я уже несколько раз об этом сказал.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
V0fka
Дата 22.8.2013, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Цитата(diadiavova @  21.8.2013,  23:24 Найти цитируемый пост)
Чем не устраивают стандартные параметры приложения?

Вот этим

Цитата(diadiavova @  21.8.2013,  23:24 Найти цитируемый пост)
Тебе нужен не статический класс, а статическое свойство, возвращающее единственный экземпляр класса. Гугли singleton.

Что такое singleton я знаю, но почему-то думал, что для этих целей именно статический класс лучше подойдет.


Цитата(diadiavova @  21.8.2013,  23:24 Найти цитируемый пост)
Я именно об этом и написал. У статического класса могут быть только статические члены, поскольку нестатические члены являются членами экземпляра, которых у статического класса просто не может быть.

Цитата(diadiavova @  21.8.2013,  23:24 Найти цитируемый пост)
На самом деле так и я уже несколько раз об этом сказал.

Я может дотошный немного, но хотел для себя уяснить все однозначно smile . Спасибо тебе большое за ликбез! smile 
PM MAIL   Вверх
diadiavova
Дата 22.8.2013, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(V0fka @  22.8.2013,  10:34 Найти цитируемый пост)
Вот этим

А почему ты ищешь сохранённые парамеиры в файле конфигурации? Они сохраняются в специальных файлах .settings и находятся где-то в папке аппдата. Нужно смотреть, восстановились они или нет, а не искать в файле. Что до сохранения простых и сложных настроек, то типы, сохраняемые в настройках, должны быть сериализуемыми, деталей не помню, но всё есть в документации по параметрам. Например эту статью неплохо бы прочитать
http://msdn.microsoft.com/ru-ru/library/8eyb2ct1.aspx
да и вообще связанные топики
Цитата

Если поставщику LocalFileSettingsProvider требуется сохранить параметры на диск, он выполняет перечисленные ниже действия.


Использует отражение для проверки всех свойств, определенных для производного от ApplicationSettingsBase класса, выявляя свойства, примененные с атрибутами ApplicationScopedSettingAttribute и UserScopedSettingAttribute. 


Сериализует свойство на диск. Сначала пытается вызвать метод ConvertToString или ConvertFromString связанного с типом класса TypeConverter. Если это не удается, использует XML-сериализацию. 


Распределяет параметры по файлам на основании атрибута параметра.



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
V0fka
Дата 23.8.2013, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



diadiavova, спасибо! Во-первых, я действительно не там искал настройки. А во-вторых, они должны были загружаться в программу, но не загружались почему-то. Но в форме, в которой я это делал, и настройки не работали и привязки. Сделал новую форму с тем же функционалом и случилось чудо smile . Почему оно не работало ранее - для меня останется загадкой. Ещё раз спасибо большое за помощь! smile

Это сообщение отредактировал(а) V0fka - 23.8.2013, 09:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1079 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.