|
Конструктор в 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 |
|
|
start [/forum/topic.php?fid=20&msg=38286848&tid=1404545]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 202ms |
0 / 0 |