|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
Можно ли и нужно ли писать конструктор в Static - классе (C#)? Ведь использование static подразумевает отсутствие экземпляра объекта? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 11:37 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
Можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 11:43 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentator, в static классе можно использовать только static конструкторы, которые могут понадобиться для инициализации static полей этого класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 11:52 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
а чему их присваивать? Или просто писать Код: c# 1.
и всё? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 11:57 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentator, сложно набрать в гугле "c# static class constructor"? Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 12:07 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorа чему их присваивать? static конструктор класса вызывается CLR до момента первого использования этого класса. Программисту ничего явно делать не нужно. Термин "присваивать" не подходит для описания работы конструкторов. То что мы пишем MyClass c1 = new MyClass() не означает что присваиваем переменной c1 значение из конструктора. Во-первых, конструктор не имеет возвращаемого значения. Во-вторых, запись new MyClass() означает две вещи - выделение памяти и вызов конструктора для инициализации данных в этой области памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 12:37 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
bazilestatic конструктор класса вызывается CLR до момента первого использования этого класса. Программисту ничего явно делать не нужно. Как мне посоветовали, я набрал в гугле "c# static class constructor" и тут нашёл: A static constructor ... executed only once when the type is first used. All classes can have static constructors, not just static classes. То есть он вызывается в момент первого использования. Что, мне собственно, не совсем подходит для инициализации переменных (нужно считать настройки системы). bazileТермин "присваивать" не подходит для описания работы конструкторов. То что мы пишем MyClass c1 = new MyClass() не означает что присваиваем переменной c1 значение из конструктора. Во-первых, конструктор не имеет возвращаемого значения. Во-вторых, запись new MyClass() означает две вещи - выделение памяти и вызов конструктора для инициализации данных в этой области памяти. А как же экземпляр класса? Я до сих пор думал, что конструктор генерирует экземпляр класса. Во всяком случае, не static конструктор. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 13:02 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorТо есть он вызывается в момент первого использования. Не совсем так. CLR гарантирует нам что статический конструктор будет выполнен до момента первого обращения к этому классу. В какой именно момент времени это произойдет - прямо перед обращением, в самом начале выполнения программе или где-то в промежутке - нам неизвестно. Главное что он будет выполнен. defragmentatorЧто, мне собственно, не совсем подходит для инициализации переменных (нужно считать настройки системы). Не вижу связи. Нужно читать - бери и читай. Staic конструктор здесь прекрасно вписывается. defragmentatorА как же экземпляр класса? Я до сих пор думал, что конструктор генерирует экземпляр класса. Во всяком случае, не static конструктор. Задача конструктора инициализировать поля класса (экземплярные или статические) так чтобы им можно было пользоваться. Экзмепляр класса это по сути участок памяти который выделяется с помощью внутренних механизмов CLR. Затем имея этот участок памяти мы можем инициализировать его вызвав конструктор. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 13:27 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
OK, всё прочёл, однако авторСтатический конструктор нельзя вызывать напрямую.. Так что спасибо, но это не то, что мне нужно. Надо делать метод для инициализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:23 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorOK, всё прочёл, однако авторСтатический конструктор нельзя вызывать напрямую.. Так что спасибо, но это не то, что мне нужно. Надо делать метод для инициализации.Ну так на то есть шаблон Singleton. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:25 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
bazile, bazileНе совсем так. CLR гарантирует нам что статический конструктор будет выполнен до момента первого обращения к этому классу. В какой именно момент времени это произойдет - прямо перед обращением, в самом начале выполнения программе или где-то в промежутке - нам неизвестно. Главное что он будет выполнен. stackoverflowWhen beforefieldinit is present, the JIT compiler is allowed to optimize the code, by testing for the static ctor invocation BEFORE entering the loop. If it's not present, this optimization is not allowed. The C# compiler automatically decides for us when to emit this attribute. It currently (C# 4) emits it only if the code does NOT explicitly defines a static constructor Если вы создали явный конструктор типа, он будет вызван именно в тот момент, когда к нему будет выполняться обращение. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:42 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
к типу* ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:43 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorOK, всё прочёл, однако авторСтатический конструктор нельзя вызывать напрямую.. Так что спасибо, но это не то, что мне нужно. Надо делать метод для инициализации.Объяснить сможете, почему это не то, что Вам нужно? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 17:21 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
skyANA, Ну как бы чтение настроек лучше выполнять в предсказуемом месте проекта:) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 18:03 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentator, Статический конструктор более чем предсказуемое место. Он гарантировано будет вызван до первого обращения к типу (к любому свойству класса). В случае же изобретения велосипеда, нужно будет не забыть ни Вам ни другим программистам использующим Ваш код вызвать явную инициализацию велосипеда. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 09:18 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
Homosum, у меня гоночный лисапед ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 09:46 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorHomosum, у меня гоночный лисапед Открой для себя DI контейнер ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 10:54 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorу меня гоночный лисапед Чем обсусловлен выбор именно статического класса? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 10:58 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
МСУdefragmentatorу меня гоночный лисапед Чем обсусловлен выбор именно статического класса? Класс - это совокупность процессов обработки данных. Можно сказать, часть приложения. Ну и экземпляр должен быть один. static - простейший вариант реализации в данном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 15:53 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorКласс - это совокупность процессов обработки данных. Можно сказать, часть приложения. http://msdn.microsoft.com/ru-ru/library/x9afc042.aspx Класс — это логическая структура, позволяющая создавать свои собственные пользовательские типы путем группирования переменных других типов, методов и событий. Класс подобен чертежу. defragmentatorНу и экземпляр должен быть один. Это не задача класса, ровно как и чертежа. Четреж (класс) один, а строений (экземплятор) может быть десять. Не путай теплое с мягким. Класс не должно заботить то, кем и сколько раз он вызывается. defragmentatorstatic - простейший вариант реализации в данном случае. Статика удобная для хелперов и расширений. Бизнес логика с пломощью статики - самоубийство в чистом виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 17:01 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
МСУ, у нас так пишут. А в чём суицид-то?:) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 17:45 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorМСУ, у нас так пишут. Плохих программистов сейчас много. defragmentatorА в чём суицид-то?:) Проблемы при работе в многопоточной среде, в веб приложениях, в веб сервисах, невозможность использовать слабосвязность IoC, невозможность использования DI контейнеров, невозможность наследования и прочее, прочее, прочее... Мало? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 17:50 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
МСУПроблемы при работе в многопоточной среде, в веб приложенияхОднако, последний тренд написания хэлперов в ASP.Net MVC говорит об обратном. :-) МСУневозможность наследованияНаследование есть, но без полиморфизма. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 18:02 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorНу и экземпляр должен быть один. Нужен централизованный доступ к дефолтному экземпляруПоправил. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 18:04 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
Алексей Кпоследний тренд написания хэлперов в ASP.Net MVC говорит об обратном Для хелперов static классы прекрасно подходят и МСУ про это сказал. Алексей КНаследование есть, но без полиморфизма. Ты что-то путаешь. static классы по определению являются sealed. Единственное что мы там можем "переопределить" это static методы Equals и ReferenceEquals. Пользы от этого лично я не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 18:24 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
МСУневозможность использовать слабосвязность IoC, невозможность использования DI контейнеров, это им не нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 18:44 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
bazileАлексей Кпоследний тренд написания хэлперов в ASP.Net MVC говорит об обратном Для хелперов static классы прекрасно подходят и МСУ про это сказал.При этом утверждая, что static - зло. bazileАлексей КНаследование есть, но без полиморфизма. Ты что-то путаешь. static классы по определению являются sealed. Единственное что мы там можем "переопределить" это static методы Equals и ReferenceEquals. Пользы от этого лично я не вижу. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 18:46 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
ИзопропилМСУневозможность использовать слабосвязность IoC, невозможность использования DI контейнеров, это им не нужноДа, это нам не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 18:47 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
Алексей КПри этом утверждая, что static - зло. В одних ситуациях зло, в других нет. Это так трудно осознать? Алексей Кbazile... static классы по определению являются sealed. ... Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Это не static классы. Попробуй такой пример: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 19:04 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
bazileАлексей КПри этом утверждая, что static - зло. В одних ситуациях зло, в других нет. Это так трудно осознать?Лично меня особо беспокоит два недостатка static. А Вас? bazileЭто не static классы. Попробуй такой пример: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Это не важно. Важно что там static-методы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 19:20 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
Алексей КЭто не важно. Важно что там static-методы. Важно так как мы обсуждаем static классы, а не классы со static методами. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 19:43 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
МСУdefragmentatorМСУ, у нас так пишут. Плохих программистов сейчас много. defragmentatorА в чём суицид-то?:) Проблемы при работе в многопоточной среде, в веб приложениях, в веб сервисах, невозможность использовать слабосвязность IoC, невозможность использования DI контейнеров, невозможность наследования и прочее, прочее, прочее... Мало? Я использую static класс для работы в многопоточной среде, с веб-сервисами и пока никаких проблем не заметил. А с чего Вы взяли, что должны быть проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 20:58 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorskyANA, Ну как бы чтение настроек лучше выполнять в предсказуемом месте проекта:) defragmentatorА с чего Вы взяли, что должны быть проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 21:20 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorМожно ли и нужно ли писать конструктор в Static - классе (C#)? Ведь использование static подразумевает отсутствие экземпляра объекта? Не только отсутствие, если лень тип объявлять запечатанным , вполне допустим хак с пустым конструктором типа. А вообще проблема ушла в прошлое, на четвертом появился сахар - lazy ( хоть и ругают меня за это), там даже есть для гурманов -double checked locking, Я разделяю беспокойство мсу по поводу многопоточности, это вполне реально при статической инициализации тут не имелось ввиду конкурентный доступ к чему- то, он будет всегда если есть потоки, это все на совести программиста лочить доступ или тащить в апартаменты подготовленные данные типа сессии единицы работы, подготовленной заранее в укромном месте.. ну и про производительность, ( не сказал никто ) это ущербно в разгар работы приложения вытаскивать тип - конструктор при первом обращении и инициализировать синглтон, более разумно при старте приложения делать эти операции ( дорогие) тогда выходит ---- и конструктор типа не нужен, мы его можем про инициализировать снаружи при старте.. А вообще есть есть куча фишек setting, для этого.. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 23:11 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
defragmentatorЯ использую static класс для работы в многопоточной среде, с веб-сервисами и пока никаких проблем не заметил. А с чего Вы взяли, что должны быть проблемы?Проблемы начнутся, когда захочется сделать статическое поле. Доступ к нему придётся синхронизировать. Про мёртвые блокировки между статическими конструкторами уже сказали выше. Ну и в отсутствии полиморфизма тоже нет ничего хорошего. Больше вроде как проблем нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 06:50 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
bazileАлексей КЭто не важно. Важно что там static-методы. Важно так как мы обсуждаем static классы, а не классы со static методами.Убери static, сделай приватный конструктор - получится то же самое, только с наследованием статических членов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 06:54 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
Алексей КПроблемы начнутся, когда захочется сделать статическое поле. Доступ к нему придётся синхронизировать. как это? почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 09:27 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
ViPRosАлексей КПроблемы начнутся, когда захочется сделать статическое поле. Доступ к нему придётся синхронизировать. как это? почему?Потому что публичные статические члены принято делать потокобезопасными. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 09:44 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
Алексей К, то есть мне надо это как то по другому писать? Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 10:03 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
Алексей Кbazile Для хелперов static классы прекрасно подходят и МСУ про это сказал.При этом утверждая, что static - зло.[/quot] Смотря для чего зло. Для хелперов и расширений статика удобна, для всего остального - зло. Алексей КЭто не важно. Важно что там static-методы. Я говорил, вообще-то, о невозможности наследования статического класса, а не обычного класса со статическими методами. Да и декорирование обычных классов статикой (а-ля синглтон) не сулит ничего хорошего, окромя пули в голове. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 10:55 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
МСУ, интересно как МССКЛ запускает многопоточно СЛР процедуры ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 11:06 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
ViPRosМСУ, интересно как МССКЛ запускает многопоточно СЛР процедуры Обыкновенно. Берет и запускает. А что там в них происходит, SQL'ю нет никакого дела. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 11:14 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
МСУА что там в них происходит, ну это в первом приближении не волнует http://msdn.microsoft.com/en-us/library/ms403277.aspx например ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 11:55 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
ViPRosАлексей К, то есть мне надо это как то по другому писать? Код: c# 1.
readonly причём тут? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 12:09 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
МСУДа и декорирование обычных классов статикой (а-ля синглтон) не сулит ничего хорошего, окромя пули в голове.Ну не знаю. Мне синглетоны нравятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 12:10 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
ИзопропилМСУА что там в них происходит, ну это в первом приближении не волнует http://msdn.microsoft.com/en-us/library/ms403277.aspx например Речь про статические методы (CRL процедуры), а не про запрещенные типы, атрибуты и сборки. Алексей КМСУДа и декорирование обычных классов статикой (а-ля синглтон) не сулит ничего хорошего, окромя пули в голове.Ну не знаю. Мне синглетоны нравятся. Как может нравиться это убожество? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 12:42 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
Алексей КViPRosАлексей К, то есть мне надо это как то по другому писать? Код: c# 1.
readonly причём тут? откуда я знаю ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 13:06 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
ViPRosоткуда я знаю А почему просто константу не объявить? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 13:29 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
МСУ, так больше нравится круто выглядит интересно что можно любой объект так обявить и ридонлу заканчивается только на объектной ссылке, а внутри что хошь меняй притом все это норм безопасно пашет уже несколько лет ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 13:38 |
|
Конструктор в static классе
|
|||
---|---|---|---|
#18+
гуглишь? не старайся, я уезжаю домой :):):) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 13:45 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1404545]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
others: | 316ms |
total: | 512ms |
0 / 0 |