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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Singleton versus Static Class, Взаимозаменяемы ли? 
:(
    Опции темы
neutrino
Дата 7.8.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Приветствую!

Любой синглтон можно реализовать как статичный класс и наоборот. Но всегда ли это правильно?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Partizan
Дата 7.8.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



neutrino, я лично предпочитаю singletonы...
помнится на sql.ru был большой диспут по поводу того что же лучше)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Любитель
Дата 7.8.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



С синглетоном больше контроля. Если нетривиальный случай - я за синглетоны. Статик-классы - когда просто несколько методов. Статик-поля в большом количестве - я против. Всё, конечно, сугубо моё мнение smile


--------------------
PM MAIL ICQ Skype   Вверх
Partizan
Дата 7.8.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



а ещё статические классы наследовать нельзя )  smile 


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
mihryak
Дата 7.8.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(neutrino @  7.8.2008,  16:00 Найти цитируемый пост)
Любой синглтон можно реализовать как статичный класс и наоборот. Но всегда ли это правильно? 

не правильно само утверждение =)
помимо наследования от классов и интерфейсов, статические класса не получится передавать как параметры
PM MAIL ICQ   Вверх
mihryak
Дата 7.8.2008, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я, кстати, кроме разве что ремоутинга и пары других крайне специфичных штук, синглтонов избегаю - как раз потому, что статические классы выглядят более простым решением, а простота - это прекрасно =)
а при необходимости наследования от классов или реализации интерфейсов, предпочитаю завести статические поля, это даёт пользователю возможность не задумываться о моих архитектурных решениях и без проблем создавать инстансы по необходимости

(всё, разумеется, тоже сугубо личное smile)
PM MAIL ICQ   Вверх
Любитель
Дата 7.8.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(mihryak @  7.8.2008,  16:43 Найти цитируемый пост)
как раз потому, что статические классы выглядят более простым решением

Что сложного в типовом синглетоне? Если так лень писать - набросать один раз сниппет дело 10 минут максимум smile


--------------------
PM MAIL ICQ Skype   Вверх
mihryak
Дата 7.8.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



имел в виду, конечно, сложного не по написанию, а по логике - private или protected конструктор, создание инстанса втихаря, запоминание его, возвращение по запросу.. всё это  должно быть чем-то оправдано
и, на мой взгляд, единственное оправдание, которое здесь может быть - это явная необходимость в инстанцируемости класса
PM MAIL ICQ   Вверх
Любитель
Дата 7.8.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Ну само собой smile Если нам нужен просто набор методов (объединённый логически) - конечно, выбираем статик-класс.


--------------------
PM MAIL ICQ Skype   Вверх
mr.DUDA
Дата 7.8.2008, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



По Рихтеру, поля статик-классов инициализируются в наиболее оптимальный момент.


--------------------
user posted image
PM MAIL WWW   Вверх
Любитель
Дата 7.8.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Понятие "оптимальность" относительное. Сколько помню - они инициализируются при первом использовании (может есть исключения, но да ладно). Оптимально? Вроде бы. Но если инициализация продолжительна, то вполне возможно, что в каком-то конкретном случае лучше будет всё проинитить при запуске приложения, дабы обеспечить мгновенный отклик затем. Статик-метод Init не рулит в силу неочевидности и возможности вызвать его два раза. Синглетон даёт больший контроль для программиста (в первую очередь речь про момент создания объекта, т. е. инициализации полей) и потому зачастую является лучшим решением.


--------------------
PM MAIL ICQ Skype   Вверх
Partizan
Дата 7.8.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



это всё в общем и целом остаётся на усмотрение программиста...что он выберет синглтон или статический класс...есть конечно случаи когда один из вариантов не подходит...но это скорее исключения...

как по мне - так синглтоны выглядят более элегантно)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
mihryak
Дата 7.8.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Любитель @  7.8.2008,  20:18 Найти цитируемый пост)
если инициализация продолжительна, то вполне возможно, что в каком-то конкретном случае лучше будет всё проинитить при запуске приложения, дабы обеспечить мгновенный отклик затем. Статик-метод Init не рулит в силу неочевидности и возможности вызвать его два раза.

ну в таком случае придётся искусственно (в ряде случаев) при загрузке обратиться с синглтону, что мало чем отличается от вызова Init по очевидности
а вот то, что инициализацией можно более гибко управлять, - факт

у синглтона есть существенный недостаток - он, являясь по сути глобальной переменной, пагубно влияет на стиль программирования неокрепших умов
PM MAIL ICQ   Вверх
Partizan
Дата 7.8.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



mihryak, ну понятно, что от человека, который использует синглтон потому,что ему хотелось бы глобальных переменных, ждать хорошего не приходится ) Опять же понятно, что важно понимать, зачем синглтоны нужны и когда их действительно следует использовать )

Там где нужно использовать синглон - используем синглтон...там где нужен статический класс - используем статический класс ) вот и всё )


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
mr.DUDA
Дата 7.8.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



У статик-класса поля проинициализируются при запуске приложения, а не при первом обращении к какому-либо мемберу класса (статическому или нестатическому).


--------------------
user posted image
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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