powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Инициализация статического класса
25 сообщений из 279, страница 10 из 12
Инициализация статического класса
    #39812244
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlДа блин, задал я вопросик... Семь страниц. одного заблокировали... Я вас уже что-то боюсь.
Просто вопросики надо толком формулировать. Тогда будут обсуждать их, а не фигню всякую :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812251
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухНеделю в бане с нетерпением ждал, чтобы как попугай продолжить: "Ты десктоп не писал, десктоп не писал..." :)
Ну, в десктопе, там особые подходы нужны. DI там запрещен, паттерны запрещены, м.б. в какой-нибудь будующей версии и ООП запретят, весь винформс на статических классах перепишут.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812271
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухНеделю в бане с нетерпением ждал, чтобы как попугай продолжитьтак WebPrj - это ж клон, не узнал по стилю?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812283
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДмитрий МухНеделю в бане с нетерпением ждал, чтобы как попугай продолжитьтак WebPrj - это ж клон, не узнал по стилю?

А "Web" к никнейму добавлен для пущей конспирации? :-)))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812284
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
А ты узнал по стилю рассуждающих про десктоп, ни разу не писавших form.show();
))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812285
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Зачем тебе конспирация. Ты на третьем шаге пустился в рассуждения про мембера а не глобальный эвент))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812286
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglfkthatWebPrj,

А насчет десктопа, вот, вполне себе жизненный пример:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public static class GlobalTimer {
    public static event EventHandler Tick;

    // .......
    // .......
}

public class MyForm: Form {
   public MyForm() {
        GlobalTimer.Tick += timer_Tick;
   }

   // ......
   // ......
}




Пользователь стопиццот раз откроет и закроет эту форму и все стопиццот экземпляров её объекта останутся висеть в памяти до конца работы приложения. Но это ведь тоже не утечка памяти, так ведь?
Именно так. Это не утечка, это архитектурный про*б.
У тебя проблема с терминологией. Есть еще <memory hog>
Читайте по чайной ложке на ночь этого мембера. Дети мои.
Его стиль - профессионализм.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812288
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю, на вопрос, в чем разница между статиком без конструктора и статиком с конструктором (даже пустым), никто из поклонников статиков ответить так и не может? Как же вы так свой основной инструмент не знаете?

Спойлер
Статик без конструктора метится компилятором флагом "beforefieldinit". Поэтому его поля будут инициализированы только тогда, когда одно из них действительно понадобится. У статика с конструктором такого флага нет, поэтому поля проинитятся при любом первом вызове класса, даже если этому вызову ни одно поле не требуется.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812289
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Читайте по чайной ложке на ночь этого мембера. Дети мои.
Его стиль - профессионализм.
Тоже твой клоун, что ли?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812293
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123Читайте по чайной ложке на ночь этого мембера. Дети мои.
Его стиль - профессионализм.
Тоже твой клоун, что ли?
тебя тоже в игнор поставить?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812296
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123тебя тоже в игнор поставить?
Да ты чо, я же этого не переживу
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812303
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
ОК. Будешь вторым балаболом на всем sql.ru.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812306
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЯ так понимаю, на вопрос, в чем разница между статиком без конструктора и статиком с конструктором (даже пустым), никто из поклонников статиков ответить так и не может? Как же вы так свой основной инструмент не знаете?

Спойлер
Статик без конструктора метится компилятором флагом "beforefieldinit". Поэтому его поля будут инициализированы только тогда, когда одно из них действительно понадобится. У статика с конструктором такого флага нет, поэтому поля проинитятся при любом первом вызове класса, даже если этому вызову ни одно поле не требуется.
Прикольно. Есть в оф.документации ?
Только я не понял практической разницы или объяснения:
- нет конструктора - объект инициализируется при обращении к любому полю (но не методу ???)
- есть конструктор - при обращении в т.ч к любому методу, даже если метод пустой

И ?

ЗЫ. Я не сторонник глобальных объектов и в т.ч стат.классов С№. Но каждый гвоздь бывает нужен
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812308
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglПрикольно. Есть в оф.документации ?
Только я не понял практической разницы или объяснения:
- нет конструктора - объект инициализируется при обращении к любому полю (но не методу ???)
- есть конструктор - при обращении в т.ч к любому методу, даже если метод пустой


Да, есть где-то. Можно погуглить по "beforefieldinit flag".

Вот пример:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
    public class Bar
    {
        public Bar()
        {
            Console.WriteLine("Hello from Bar");
        }
    }
    
    public static class FooWithoutCtor
    {
        private static Bar _bar = new Bar();

        public static void HelloFoo()
        {
            Console.WriteLine("Hello from Foo without ctor");
        }
    }

    public static class FooWithCtor
    {
        private static Bar _bar = new Bar();

        static FooWithCtor()
        {
        }

        public static void HelloFoo()
        {
            Console.WriteLine("Hello from Foo with ctor");
        }
    }

    public class Program
    {
        private static void Main()
        {
            FooWithoutCtor.HelloFoo();
            // "Hello from Foo without ctor"

            FooWithCtor.HelloFoo();
            // "Hello from Bar"
            // "Hello from Foo with ctor"
        }
    }



Т.е. в первом случае поле _bar так и не проинициализировалось, т.к. оно не требовалось, а во втором случае это все равно произошло.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812311
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

два предмета (с) анекдот
- практическое значение
- описанность в документации

а ты полотенце принес.....
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812317
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglfkthat,

два предмета (с) анекдот
- практическое значение
- описанность в документации

а ты полотенце принес.....
Практическое значение - "lazy" инициализация. В документации описан этот флаг, который я упоминал. Про то, как компилятор его проставляет, я так сразу ссылку дать не могу, но на эту тему было много статей, потому что при переходе с .NET 2 на 4 это поведение поменялось и некоторых это немного удивило.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812332
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДмитрий МухНеделю в бане с нетерпением ждал, чтобы как попугай продолжитьтак WebPrj - это ж клон, не узнал по стилю?

Были подозрения, но ник вроде в 2010-м зареган, поэтому сомневаюсь :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812334
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
ОК. Будешь вторым балаболом на всем sql.ru.

fkthat, тебе оказана большая честь, теперь ты второй после Пети
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812375
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Код: c#
1.
 Console.WriteLine("Not static: {0}", Measure(() => Repeat(n, ()=> { var p = new Program(); p.NotStatic(); })));
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812377
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавь еще
Код: c#
1.
2.
3.
4.
5.
  private int[] iArr;
        public Program()
        {
            iArr = new int[10000];
        }
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812379
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВfkthat,
Код: c#
1.
 Console.WriteLine("Not static: {0}", Measure(() => Repeat(n, ()=> { var p = new Program(); p.NotStatic(); })));



Сравнение будет некорректное потому что будет сравниваться не вызов с вызовом а создание объекта + вызов с просто вызовом.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812382
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВДобавь еще
Код: c#
1.
2.
3.
4.
5.
  private int[] iArr;
        public Program()
        {
            iArr = new int[10000];
        }



Да чо уж там мелочиться - давай сразу туда добавим разложение стопитисотзначного числа на простые множители, типа, наша лошадь проигрывает - привяжем тогда сопернику гирю двухпудовую к хвосту
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812387
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatSiemarglfkthat,

два предмета (с) анекдот
- практическое значение
- описанность в документации

а ты полотенце принес.....
Практическое значение - "lazy" инициализация. В документации описан этот флаг, который я упоминал. Про то, как компилятор его проставляет, я так сразу ссылку дать не могу, но на эту тему было много статей, потому что при переходе с .NET 2 на 4 это поведение поменялось и некоторых это немного удивило.
А теперь правильный ответ.
https://docs.microsoft.com/ru-ru/visualstudio/code-quality/ca1810-initialize-reference-type-static-fields-inline?view=vs-2019
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812388
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812405
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

Во, даже такое есть. Но для этого, чтобы увидеть, наверное FxCop надо прикручивать.
...
Рейтинг: 0 / 0
25 сообщений из 279, страница 10 из 12
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Инициализация статического класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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