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

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

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

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

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

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

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

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

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

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


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

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

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

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


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