Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Конструктор в static классе / 25 сообщений из 53, страница 1 из 3
05.06.2013, 11:37
    #38286431
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
Можно ли и нужно ли писать конструктор в Static - классе (C#)?
Ведь использование static подразумевает отсутствие экземпляра объекта?
...
Рейтинг: 0 / 0
05.06.2013, 11:43
    #38286444
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
Можно.
...
Рейтинг: 0 / 0
05.06.2013, 11:52
    #38286464
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentator, в static классе можно использовать только static конструкторы, которые могут понадобиться для инициализации static полей этого класса.
...
Рейтинг: 0 / 0
05.06.2013, 11:57
    #38286481
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
а чему их присваивать?
Или просто писать
Код: c#
1.
MyClass()

и всё?
...
Рейтинг: 0 / 0
05.06.2013, 12:07
    #38286502
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentator, сложно набрать в гугле "c# static class constructor"?
Код: c#
1.
2.
3.
4.
static MyClass()
{
    // ...
}
...
Рейтинг: 0 / 0
05.06.2013, 12:37
    #38286567
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentatorа чему их присваивать?
static конструктор класса вызывается CLR до момента первого использования этого класса. Программисту ничего явно делать не нужно.

Термин "присваивать" не подходит для описания работы конструкторов. То что мы пишем MyClass c1 = new MyClass() не означает что присваиваем переменной c1 значение из конструктора. Во-первых, конструктор не имеет возвращаемого значения. Во-вторых, запись new MyClass() означает две вещи - выделение памяти и вызов конструктора для инициализации данных в этой области памяти.
...
Рейтинг: 0 / 0
05.06.2013, 13:02
    #38286619
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
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 конструктор.
...
Рейтинг: 0 / 0
05.06.2013, 13:27
    #38286689
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentatorТо есть он вызывается в момент первого использования.
Не совсем так. CLR гарантирует нам что статический конструктор будет выполнен до момента первого обращения к этому классу. В какой именно момент времени это произойдет - прямо перед обращением, в самом начале выполнения программе или где-то в промежутке - нам неизвестно. Главное что он будет выполнен.

defragmentatorЧто, мне собственно, не совсем подходит для инициализации переменных (нужно считать настройки системы).
Не вижу связи. Нужно читать - бери и читай. Staic конструктор здесь прекрасно вписывается.

defragmentatorА как же экземпляр класса? Я до сих пор думал, что конструктор генерирует экземпляр класса. Во всяком случае, не static конструктор.
Задача конструктора инициализировать поля класса (экземплярные или статические) так чтобы им можно было пользоваться. Экзмепляр класса это по сути участок памяти который выделяется с помощью внутренних механизмов CLR. Затем имея этот участок памяти мы можем инициализировать его вызвав конструктор.
...
Рейтинг: 0 / 0
05.06.2013, 14:09
    #38286781
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
...
Рейтинг: 0 / 0
05.06.2013, 14:23
    #38286810
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
OK, всё прочёл, однако
авторСтатический конструктор нельзя вызывать напрямую..
Так что спасибо, но это не то, что мне нужно. Надо делать метод для инициализации.
...
Рейтинг: 0 / 0
05.06.2013, 14:25
    #38286815
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentatorOK, всё прочёл, однако
авторСтатический конструктор нельзя вызывать напрямую..
Так что спасибо, но это не то, что мне нужно. Надо делать метод для инициализации.Ну так на то есть шаблон Singleton.
...
Рейтинг: 0 / 0
05.06.2013, 14:42
    #38286846
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
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

Если вы создали явный конструктор типа, он будет вызван именно в тот момент, когда к нему будет выполняться обращение.
...
Рейтинг: 0 / 0
05.06.2013, 14:43
    #38286848
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
к типу*
...
Рейтинг: 0 / 0
05.06.2013, 17:21
    #38287165
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentatorOK, всё прочёл, однако
авторСтатический конструктор нельзя вызывать напрямую..
Так что спасибо, но это не то, что мне нужно. Надо делать метод для инициализации.Объяснить сможете, почему это не то, что Вам нужно?
...
Рейтинг: 0 / 0
05.06.2013, 18:03
    #38287225
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
skyANA,

Ну как бы чтение настроек лучше выполнять в предсказуемом месте проекта:)
...
Рейтинг: 0 / 0
06.06.2013, 09:18
    #38287776
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentator,
Статический конструктор более чем предсказуемое место.
Он гарантировано будет вызван до первого обращения к типу (к любому свойству класса).
В случае же изобретения велосипеда, нужно будет не забыть ни Вам ни другим программистам использующим Ваш код вызвать явную инициализацию велосипеда.
...
Рейтинг: 0 / 0
06.06.2013, 09:46
    #38287812
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
Homosum,

у меня гоночный лисапед
...
Рейтинг: 0 / 0
06.06.2013, 10:54
    #38287933
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentatorHomosum,

у меня гоночный лисапед

Открой для себя DI контейнер
...
Рейтинг: 0 / 0
06.06.2013, 10:58
    #38287944
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentatorу меня гоночный лисапед
Чем обсусловлен выбор именно статического класса?
...
Рейтинг: 0 / 0
06.06.2013, 15:53
    #38288590
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
МСУdefragmentatorу меня гоночный лисапед
Чем обсусловлен выбор именно статического класса?

Класс - это совокупность процессов обработки данных. Можно сказать, часть приложения.
Ну и экземпляр должен быть один.
static - простейший вариант реализации в данном случае.
...
Рейтинг: 0 / 0
06.06.2013, 17:01
    #38288777
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentatorКласс - это совокупность процессов обработки данных. Можно сказать, часть приложения.
http://msdn.microsoft.com/ru-ru/library/x9afc042.aspx Класс — это логическая структура, позволяющая создавать свои собственные пользовательские типы путем группирования переменных других типов, методов и событий. Класс подобен чертежу.


defragmentatorНу и экземпляр должен быть один.
Это не задача класса, ровно как и чертежа. Четреж (класс) один, а строений (экземплятор) может быть десять. Не путай теплое с мягким. Класс не должно заботить то, кем и сколько раз он вызывается.

defragmentatorstatic - простейший вариант реализации в данном случае.
Статика удобная для хелперов и расширений. Бизнес логика с пломощью статики - самоубийство в чистом виде.
...
Рейтинг: 0 / 0
06.06.2013, 17:45
    #38288857
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
МСУ,

у нас так пишут.
А в чём суицид-то?:)
...
Рейтинг: 0 / 0
06.06.2013, 17:50
    #38288859
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentatorМСУ, у нас так пишут.
Плохих программистов сейчас много.

defragmentatorА в чём суицид-то?:)
Проблемы при работе в многопоточной среде, в веб приложениях, в веб сервисах, невозможность использовать слабосвязность IoC, невозможность использования DI контейнеров, невозможность наследования и прочее, прочее, прочее... Мало?
...
Рейтинг: 0 / 0
06.06.2013, 18:02
    #38288880
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
МСУПроблемы при работе в многопоточной среде, в веб приложенияхОднако, последний тренд написания хэлперов в ASP.Net MVC говорит об обратном. :-)
МСУневозможность наследованияНаследование есть, но без полиморфизма.
...
Рейтинг: 0 / 0
06.06.2013, 18:04
    #38288881
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор в static классе
defragmentatorНу и экземпляр должен быть один. Нужен централизованный доступ к дефолтному экземпляруПоправил.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Конструктор в static классе / 25 сообщений из 53, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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