powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Глобальный класс
23 сообщений из 23, страница 1 из 1
Глобальный класс
    #39529263
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понимаю, как его создать ?
Например - класс SessionManager.
Он 1 раз загрузил бы значения из текстового файла(или БД) и я обращался к ним как свойствам класса.
Например :
Код: c#
1.
2.
 ShowMessage(SessionManager.UserName);
 ShowMessage(SessionManager.ConnectionString);


Что-то по аналогии с MemCache
MemCache - это не статичный класс, конструктор которого вызывается в не понятный для меня момент.
...
Рейтинг: 0 / 0
Глобальный класс
    #39529274
DeanWinchester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

static с семафором для разграничения по доступу ?
...
Рейтинг: 0 / 0
Глобальный класс
    #39529277
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

а инвалидировать как будешь?
...
Рейтинг: 0 / 0
Глобальный класс
    #39529378
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeanWinchesterstatic с семафором для разграничения по доступу ?

MemCache - не является Static классом, это просто как пример.
Не надо семафоров и многопоточности.

hVosttа инвалидировать как будешь?
Это что ?
Задача - обращаться к свойствам класса как на примере.
...
Рейтинг: 0 / 0
Глобальный класс
    #39529445
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Ну так создай класс и обращайся. В чём проблема?
...
Рейтинг: 0 / 0
Глобальный класс
    #39529448
DeanWinchester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Код: c#
1.
this.Session["SomeStorage"] = new MyStorage
...
Рейтинг: 0 / 0
Глобальный класс
    #39529498
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Глобальный класс = статик класс, у которого нет конструктора.
Класс MemoryCache - это класс, или его экземпляр ?
...
Рейтинг: 0 / 0
Глобальный класс
    #39529503
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Проблема - в С# нет глобальных переменных, но есть глобальные классы.
...
Рейтинг: 0 / 0
Глобальный класс
    #39529505
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Глобальный класс
    #39529506
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BПроблема - в С# нет глобальных переменных, но есть глобальные классы.

Какая же это проблема?
...
Рейтинг: 0 / 0
Глобальный класс
    #39529507
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BПроблема - в С# нет глобальных переменных, но есть глобальные классы.
а в классах есть, как ни удивительно, статические члены
...
Рейтинг: 0 / 0
Глобальный класс
    #39529512
DeanWinchester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лок все равно придется использовать, чтобы в холостую в статик не писать
...
Рейтинг: 0 / 0
Глобальный класс
    #39529575
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКакая же это проблема?
Я не понимаю:
1. Когда создаётся экземпляр MemoryCache ?
2. Как сделать мне так-же ?

Ещё раз.
MemoryCache - только как пример.
Весь смысл - один раз инициализировать свойства класса, и обращаться к его свойствам из любого модуля, дописав в начало примерно такое.
Код: c#
1.
2.
3.
4.
using Session.Manager;
...
...
MessageBox.Show(SessionManager.ConnectionString);
...
Рейтинг: 0 / 0
Глобальный класс
    #39529743
DeanWinchester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BhVosttКакая же это проблема?
Я не понимаю:
1. Когда создаётся экземпляр MemoryCache ?
2. Как сделать мне так-же ?

Ещё раз.
MemoryCache - только как пример.
Весь смысл - один раз инициализировать свойства класса, и обращаться к его свойствам из любого модуля, дописав в начало примерно такое.
Код: c#
1.
2.
3.
4.
using Session.Manager;
...
...
MessageBox.Show(SessionManager.ConnectionString);



Код: 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.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Threading;

namespace WebApplication3.Controllers
{
    class GS
    {
        public int value;
        public bool initiated = false;
    }
    public class IndexController : Controller
    {
        static GS myStore = new GS();
        // GET: Index
        public void initStorage()
        {
            if (!myStore.initiated)
            {
                lock(myStore)
                {
                    if (myStore.initiated)
                    {
                        return;
                    }
                    /// do some stuff
                    Thread.Sleep(10000);
                    myStore.value = 1;
                    myStore.initiated = true;
                }
            }
        }
        public ActionResult Index()
        {
            initStorage();
            return new ContentResult() { Content = $"Storage value  {myStore.value}" };
        }

    }
}
...
Рейтинг: 0 / 0
Глобальный класс
    #39530123
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Почитай про паттерн Синглетон и как он реализуется на C#

И всё будет понятно.
...
Рейтинг: 0 / 0
Глобальный класс
    #39530225
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Спасибо за совет.
Я знаю про этот шаблон и знаю, как он реализуется на C#
...
Рейтинг: 0 / 0
Глобальный класс
    #39530281
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Ну смотри в примеры тогда Синглетона. Ещё можешь декомпилить MemoryCache и увидеть как это делается конкретно.
...
Рейтинг: 0 / 0
Глобальный класс
    #39530310
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Что то нереальные сложности для такой простой задачи.
...
Рейтинг: 0 / 0
Глобальный класс
    #39530387
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Код: 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.
using System;

public sealed class Singleton
{
   private static volatile Singleton instance;
   private static object syncRoot = new Object();

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null) 
         {
            lock (syncRoot) 
            {
               if (instance == null) 
                  instance = new Singleton();
            }
         }

         return instance;
      }
   }
}
...
Рейтинг: 0 / 0
Глобальный класс
    #39530388
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

ещё вариант

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class Singleton
{
    private static readonly Lazy<Singleton> lazy = 
        new Lazy<Singleton>(() => new Singleton());
 
    public string Name { get; private set; }
         
    private Singleton()
    {
        Name = System.Guid.NewGuid().ToString();
    }
     
    public static Singleton GetInstance()
    {
        return lazy.Value;
    }
}



Что тут сложного??
...
Рейтинг: 0 / 0
Глобальный класс
    #39530463
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BhVostt,

Что то нереальные сложности для такой простой задачи.
Откройте для себя https://referencesource.microsoft.com

https://referencesource.microsoft.com/#System.Runtime.Caching/System/Caching/MemoryCache.cs,238
...
Рейтинг: 0 / 0
Глобальный класс
    #39531312
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЧто тут сложного??
Я так и не понял, как сделать у тебя
Код: c#
1.
 Console.WriteLine(SessionManager.Name);
...
Рейтинг: 0 / 0
Глобальный класс
    #39531313
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В результате, у меня получилось так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class SessionManager
{
    private static SessionManager DefaultInstance = new SessionManager();
    private string FConnectionString { get; set; }
    private string FName { get; set; }
    public SessionManager()
        {
            FName = System.Guid.NewGuid().ToString(); 
            FConnectionString = "Hello world";
            Thread.Sleep(3000);
        }
    public static string ConnectionString {get { return DefaultInstance.FConnectionString; } }
    public static string Name { get { return DefaultInstance.FName; } }
}
....
Console.WriteLine(SessionManager.Name);
Console.WriteLine(SessionManager.ConnectionString);
Console.WriteLine(SessionManager.Name);
Console.ReadLine();


В консоли после 3х секунд:
Код: c#
1.
2.
3.
7b7e4230-c236-46d8-819d-d200c19ec6aa
Hello world
7b7e4230-c236-46d8-819d-d200c19ec6aa



Но я так и не понял, когда вызывается конструктор класса...
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Глобальный класс
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]