![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Приветствую!
Любой синглтон можно реализовать как статичный класс и наоборот. Но всегда ли это правильно? -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
neutrino, я лично предпочитаю singletonы...
помнится на sql.ru был большой диспут по поводу того что же лучше) -------------------- СУВ, Partizan. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
С синглетоном больше контроля. Если нетривиальный случай - я за синглетоны. Статик-классы - когда просто несколько методов. Статик-поля в большом количестве - я против. Всё, конечно, сугубо моё мнение
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
а ещё статические классы наследовать нельзя )
-------------------- СУВ, Partizan. |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
||||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
я, кстати, кроме разве что ремоутинга и пары других крайне специфичных штук, синглтонов избегаю - как раз потому, что статические классы выглядят более простым решением, а простота - это прекрасно =)
а при необходимости наследования от классов или реализации интерфейсов, предпочитаю завести статические поля, это даёт пользователю возможность не задумываться о моих архитектурных решениях и без проблем создавать инстансы по необходимости (всё, разумеется, тоже сугубо личное |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
||||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
имел в виду, конечно, сложного не по написанию, а по логике - private или protected конструктор, создание инстанса втихаря, запоминание его, возвращение по запросу.. всё это должно быть чем-то оправдано
и, на мой взгляд, единственное оправдание, которое здесь может быть - это явная необходимость в инстанцируемости класса |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Ну само собой
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
По Рихтеру, поля статик-классов инициализируются в наиболее оптимальный момент.
-------------------- ![]() |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Понятие "оптимальность" относительное. Сколько помню - они инициализируются при первом использовании (может есть исключения, но да ладно). Оптимально? Вроде бы. Но если инициализация продолжительна, то вполне возможно, что в каком-то конкретном случае лучше будет всё проинитить при запуске приложения, дабы обеспечить мгновенный отклик затем. Статик-метод Init не рулит в силу неочевидности и возможности вызвать его два раза. Синглетон даёт больший контроль для программиста (в первую очередь речь про момент создания объекта, т. е. инициализации полей) и потому зачастую является лучшим решением.
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
это всё в общем и целом остаётся на усмотрение программиста...что он выберет синглтон или статический класс...есть конечно случаи когда один из вариантов не подходит...но это скорее исключения...
как по мне - так синглтоны выглядят более элегантно) -------------------- СУВ, Partizan. |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
ну в таком случае придётся искусственно (в ряде случаев) при загрузке обратиться с синглтону, что мало чем отличается от вызова Init по очевидности а вот то, что инициализацией можно более гибко управлять, - факт у синглтона есть существенный недостаток - он, являясь по сути глобальной переменной, пагубно влияет на стиль программирования неокрепших умов |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
mihryak, ну понятно, что от человека, который использует синглтон потому,что ему хотелось бы глобальных переменных, ждать хорошего не приходится ) Опять же понятно, что важно понимать, зачем синглтоны нужны и когда их действительно следует использовать )
Там где нужно использовать синглон - используем синглтон...там где нужен статический класс - используем статический класс ) вот и всё ) -------------------- СУВ, Partizan. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
У статик-класса поля проинициализируются при запуске приложения, а не при первом обращении к какому-либо мемберу класса (статическому или нестатическому).
-------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |