powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Синглетон и статический класс
25 сообщений из 32, страница 1 из 2
Синглетон и статический класс
    #38646083
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр класса с глобальной точкой доступа.
Так вот вопрос - какая разница между синглетоном и статическим классом?
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38646089
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://www.google.ru/search?q=singleton vs static class in c# , начиная с самой первой ссылки
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38646118
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixгарантирующий, что в однопоточном приложении будет единственный экземпляр классаЭто откуда такое определение?
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38646157
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобучsaxixгарантирующий, что в однопоточном приложении будет единственный экземпляр классаЭто откуда такое определение?
Из Википедии )) В принципе понял разницу. Применимо к моим задачам - статический предпочтительнее
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38647688
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобучsaxixгарантирующий, что в однопоточном приложении будет единственный экземпляр классаЭто откуда такое определение?Если не прибегать к хакам и всякого рода извращениям в инстанциировании объекта, то корректно нарисованный синглтон гарантирует единичность экземпляра класса, потому как публичный конструктор отсутствует, а есть только статический метод возвращающий одиночку.
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38647700
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovЕсли не прибегать к хакам и всякого рода извращениям в инстанциировании объекта, то корректно нарисованный синглтон гарантирует единичность экземпляра класса, потому как публичный конструктор отсутствует, а есть только статический метод возвращающий одиночку.И? При чем тут однопоточность?
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38647808
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучAlex KuznetsovЕсли не прибегать к хакам и всякого рода извращениям в инстанциировании объекта, то корректно нарисованный синглтон гарантирует единичность экземпляра класса, потому как публичный конструктор отсутствует, а есть только статический метод возвращающий одиночку.И? При чем тут однопоточность?Сказали же: "Из Википедии". :-)
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648006
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучAlex KuznetsovЕсли не прибегать к хакам и всякого рода извращениям в инстанциировании объекта, то корректно нарисованный синглтон гарантирует единичность экземпляра класса, потому как публичный конструктор отсутствует, а есть только статический метод возвращающий одиночку.И? При чем тут однопоточность?
частный случай контекста, без которого обсуждение понятия singleton не имеет смысла
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648037
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучAlex KuznetsovЕсли не прибегать к хакам и всякого рода извращениям в инстанциировании объекта, то корректно нарисованный синглтон гарантирует единичность экземпляра класса, потому как публичный конструктор отсутствует, а есть только статический метод возвращающий одиночку.И? При чем тут однопоточность?На самом деле да, однопоточность, в данном случае, рояли не играет, как говорится (был неправ и посыпаю голову пеплом).
Причем, в англоязычной версии из той-же вики про однопоточность в определении ни слова (трудности перевода на русский язык???).
Тем не менее, при некорректной реализации в многопоточной среде, в принципе, могут возникнуть проблемы другого характера.
Вот довольно неплохая статейка на этот счёт (на иностранном языке )
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648054
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov,

потоки и многопоточная среда имеют косвенное отношение к вопросу

Относительно какого контекста "одиночка" ?
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648060
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилAlex Kuznetsov,

потоки и многопоточная среда имеют косвенное отношение к вопросу

Относительно какого контекста "одиночка" ?Изопропил, я рассматриваю многопоточную среду как N(>1) потоков в рамках одного процесса.
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648062
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovИзопропилAlex Kuznetsov,

потоки и многопоточная среда имеют косвенное отношение к вопросу

Относительно какого контекста "одиночка" ?Изопропил, я рассматриваю многопоточную среду как N(>1) потоков в рамках одного процесса.

а если рассмотреть домены в рамках процесса? Потоки не при делах будут
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648063
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov,
авторЕсли не прибегать к хакам и всякого рода извращениям в инстанциировании объекта
так есть lazy чего уж проще?
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648092
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шутка про сиглтон

Код: 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.
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Singleton.Instance.Id);
            //хуяк, у меня новый инстанс ( ну не следую я рекомендациям ms)
            Singleton singleton = (Singleton) FormatterServices.GetSafeUninitializedObject(typeof(Singleton));
            Console.WriteLine(singleton.Id);
            Console.Read();
        }
    }
    public class Singleton
    {
        public int Id = 100;
        private static Singleton instance;
        private Singleton() { }
        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }


...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648109
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилAlex Kuznetsovпропущено...
Изопропил, я рассматриваю многопоточную среду как N(>1) потоков в рамках одного процесса.

а если рассмотреть домены в рамках процесса? Потоки не при делах будутРазные домены в рамках процесса изолированы и просто так междоменное взаимодействие не организовать. Вместе с тем, как Вы знаете, в рамках одного домена может быть более одного потока. Соответственно, можно сделать так, чтобы разные потоки из разных доменов одного процесса обращались к методам единственного объекта (singleton). Правда для этого придётся "экранировать" обращение к таким методам путём создания прокси сервера и передачи ему соответствующих сообщений.
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648113
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиAlex Kuznetsov,
авторЕсли не прибегать к хакам и всякого рода извращениям в инстанциировании объекта
так есть lazy чего уж проще?Под хаками и всякого рода извращениями я имел в виду инстанциирование объекта в обход вызова статического публичного метода класса (Reflection и иже с ними).
Lazy<T> здесь абсолютно не при чём, потому как Singleton и так может быть реализован с использованием создания объекта при первом обращении к статическому методу класса (чем не Lazy?).
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648126
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov,
Да потому что краткость, мы же не в Сколково и не бальзаки получать со строчек кода, зачем изобретать велосипед
в lazy блокировок на создание интсанса как конь наеб - хош с одним хош с двумя локами..
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648131
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov,
и вообще, это тема из собеседований, знать про него конечно нужно, но применять имхо не стоит.
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648203
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиAlex Kuznetsov,
и вообще, это тема из собеседований, знать про него конечно нужно, но применять имхо не стоит.Я извиняюсь, не совсем понял чего не стоит применять ?
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648293
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи
Код: c#
1.
Singleton singleton = (Singleton) FormatterServices.GetSafeUninitializedObject(typeof(Singleton));


Тогда уж можно и так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class Foo
{
  static readonly Lazy<Foo> instance = 
    new Lazy<Foo>(()=> new Foo());
  public static Foo Instance { get { return instance.Value; } }

  Foo(){}

  public void Bar()
  {
    Console.WriteLine("Foo.Bar");
  }
}
.......
var allocate = typeof(RuntimeTypeHandle).GetMethod("Allocate", BindingFlags.NonPublic | BindingFlags.Static);
var foo = (Foo)allocate.Invoke(null, new[] { typeof (Foo) });
foo.Bar();


Ну или просто не заморачиваясь дернуть конструктор рефлекшеном.
Alex KuznetsovЯ извиняюсь, не совсем понял чего не стоит применять ?
Синглтон. Есть менние, что это антипаттерн, увеличивающий связанность системы, и, в частности, препятствующий применению TDD. И вместо него нужно использовать DI.
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648298
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны...
Alex KuznetsovЯ извиняюсь, не совсем понял чего не стоит применять ?
Синглтон. Есть менние, что это антипаттерн, увеличивающий связанность системы, и, в частности, препятствующий применению TDD. И вместо него нужно использовать DI.Аааа, а я уж спужался за Lazy<T>, думаю занафига его надо было делать, ежели есть мнение, что применять его не стоит .

Про мнение, что синглетон - это антипаттерн: это как про скальпель, которым можно операции делать, а можно и людей кромсать, или про микроскоп - можно микробов рассматривать, а можно и гвозди забивать...
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648342
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныИ вместо него нужно использовать DI.
повеселил
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648392
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что не так с DI?
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648403
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zzА что не так с DI?
слово "вместо" веселит
...
Рейтинг: 0 / 0
Синглетон и статический класс
    #38648421
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

вот извращенцы. Lazy отличная штука, но ее как-то редко используют(
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Синглетон и статический класс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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