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

Поиск:

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


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Допустим я объявил свой статический класс со статическим свойством. Теперь я этому свойству где-то в коде присвоил значение. Теперь вопросы:

1. В пределах всей сессии это свойство останется присвоенным в этом классе, со всех aspx страниц я смогу его прочитать? Так?

2. В другой сессии его прочитать уже будет нельзя? Другими словми каждая сессия будет изолирована по значениям статических классов? так?  


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Mymik
Дата 15.4.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vit, В пределах всего сайта (причем даже если данные изменились у одного пользователя, то у второго они тоже изменяться)


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 15.4.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Пока не перестартует процесс ASP.NET, все статические мемберы будут в целости и сохранности, и работать с ними может любой поток. Что-то типа расшаренных данных для разных пользователей, только в потоконебезопасном варианте.


--------------------
user posted image
PM MAIL WWW   Вверх
Vit
Дата 15.4.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Мдя... спасибо!

А как тогда и где объявить переменную моего собственного класса, чтобы она была видима для всех страниц данного сайта но в пределах только одного пользователя, а для другого пользователся она имела бы другие значения?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Exception
Дата 15.4.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

Session["Some Stuff"] = "somestuff";
Session["Some Another Stuff"] = new someAnotherStuff ();
Session["The Answer To Life Universe And Everything"] = 42;


Впрочем, это не лучший вариант, т.к. отсутствует строгая типизация и прочие прелести C#, так что читаем вот это.
PM   Вверх
Vit
Дата 15.4.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Цитата(Exception @  15.4.2007,  08:45 Найти цитируемый пост)
Впрочем, это не лучший вариант, т.к. отсутствует строгая типизация и прочие прелести C#, так что читаем вот это. 



Если честно, то мой уровень знания .net и C# пока не позволяют толком понять статью... Поэтому оставлю вопрос таким-же - возможно ли объявить где-то экземпляр класса чтобы он был доступен в пределах одной сессии со всех web форм. Если да, но это потребует каких-то акробатических номеров то для меня это пока равнозначно ответу "нет", и я не буду пока с этим заморачиваться, подожду пока у меня будет  больше опыта и знаний.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Exception
Дата 15.4.2007, 21:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ты можешь сохранять любые объекты в конкретную сессию (и они будут действительны только для неё):

Код
Session["Some Stuff"] = "somestuff";
Session["Some Another Stuff"] = new SomeAnotherStuff ();
Session["The Answer To Life Universe And Everything"] = 42;

// ...
string someStuff = Session["Some Stuff"] as string; // если такого объекта нет -- получаем null
SomeAnotherStuff someAnotherStuff = Session["Some Another Stuff"] as SomeAnotherStuff;
int answer = Session["The Answer To Life Universe And Everything"] as int;


С другой стороны, можно запросто ошибиться при получении / сохранении объекта сессии, например, допустив очепятку:

Код
int answer = Session["The Answer To Life Universe Or Everything"] as int; // всегда будет 0!


Поэтому лучшим вариантом будет создание в App_Code статического класса MySession -- строготипизированной обёртки для сессии:

Код
public static class MySession
{
    private static HttpSessionState GetSession ()
    {
        return HttpContext.Current.Session;
    }
    public static string SomeStuff
    {
        get { return GetSession()["Some Stuff"] as string; }
        set { GetSession()["Some Stuff"] = value; }
    }
    public static SomeAnotherStuff SomeAnotherStuff
    {
        get { return GetSession()["Some Another Stuff"] as SomeAnotherStuff; }
        set { GetSession()["Some Another Stuff"] = value; }
    }
    public static int Answer
    {
        get { return GetSession()["The Answer To Life Universe And Everything"] as int; }
        set { GetSession()["The Answer To Life Universe And Everything"] = value; }
    }
}

// использование
MySession.Answer = 42;
int answer = MySession.Answer;


Таким образом, мы создаём строготипизированные "обёртки" для каждой из переменной сессии и в дальнейшем пользуемся именно ими, а не объектом Session smile .

Это сообщение отредактировал(а) Exception - 16.4.2007, 07:28
PM   Вверх
Vit
Дата 15.4.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Exception, спасибо огромное, это то что мне и хотелось услышать.  Причём если я правильно понял, при создании объекта по методу:

Session["Some Another Stuff"] = new SomeAnotherStuff ();

этот объект будет живым до тех пор пока открыта сессия... Так?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Exception
Дата 15.4.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Именно так.
Разумеется, для каждой сессии он будет различаться smile .
PM   Вверх
Vit
Дата 15.4.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Ещё раз спасибо! Будем считать вопрос полностью закрытым!


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 15.4.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Vit, при всём уважении:

1) если вопрос темы решён - хорошо бы кликнуть по линку "Пометить как решённый"

2) а по сути, можно в принципе объявить статическое поле в любом классе, например в классе страницы.


--------------------
user posted image
PM MAIL WWW   Вверх
Vit
Дата 15.4.2007, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Цитата(mr.DUDA @  15.4.2007,  13:19 Найти цитируемый пост)
1) если вопрос темы решён - хорошо бы кликнуть по линку "Пометить как решённый"



Забываю... кнопка неудачно расположена, так что её не видно, да и нажать на неё можно только с постом...




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 16.4.2007, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Так, не совсем решён...


Я попытался так использовать, но возникли серьёзные проблемы.

Вот простой пример...

1) У меня есть начальная web-форма, на её Load я создаю несколько сессионных переменных.
Например я там задаю Connection String к базе данных и буду хранить её в сессии.

2) У меня есть модуль с библиотеками моих классов для обработки многих вещей, просто не люблю чтобы код который используется во многих формах был разбросан по кодам, я его собираю в одном файле.

Например у меня есть класс который выполняет запросы к базам данных, все SQL запросы идут через этот класс, там же хранятся и все SQL коды, т.е. всё что связано с базами тут. Клас статический, потому как функции однотипны, фактически это библиотека функций. 

И вот в этом классе объект Session не виден. Сначала думал что из-за того что класс статический, но убрал директиву static, всё равно не видит, добавил в using вроде всё... (кстати, а что надо добавлять?) тоже не виден... И как быть с этим?



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Exception
Дата 16.4.2007, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Я же показывал, что лучше действовать не через Session, а через свой статический класс smile .
Просто Session -- это свойство страницы, и этот объект виден только в её контексте. Чтобы обратиться к сессии не из страницы, используй объект HttpContext.Current.Session.
И всё-таки, пересмотри ещё раз этот пост.

Это сообщение отредактировал(а) Exception - 16.4.2007, 06:23
PM   Вверх
Vit
Дата 20.4.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Всем огромное спасибо, вроде разобрался, теперь уж точно всё работает.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

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


 




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


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

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