powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Инициализация статического класса
279 сообщений из 279, показаны все 12 страниц
Инициализация статического класса
    #39808668
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть статический класс, к примеру

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    static class asd
    {
        public static int m;

        public static int sum_m(int a)
        {
            return a + m;
        }
    }


где m - некоторая глобальная переменная для всех ф-ций класса, требующая присвоения значения.

В случае с обычным классом я бы создал конструктор с этой переменной, и компилятор просто не дал бы создать объект без ее инициализации.

А в статическом классе можно сделать как-то так, чтоб компилятор ругался "нефиг вызывать методы этого класса, не проинициализировав переменную", если перед вызовом любого метода не присвоить ей значение?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808676
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Статики - зло;
2) Мембер класса всегда инициализируется автоматически значением по умолчанию.
3) Public fields - зло. Замени на свойство и поставь проверку что было присвоение.
4) Освой общепринятый стиль именования для C#

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
static class asd {
    private static bool _mInitialized;
    private static int _m;

    public static int M {
         get { return _m; }
         set {
            _mInitialized = true;
            _m = value;
         }
    }

    public static int sum_m(int a) {
        if(!_mInitalized) throw new InvalidOperationException("Инициализируй M, блеат!");
        return _m + a;
    }
}
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808679
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql
Код: c#
1.
public static int m = 3.14;


?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808682
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPublic fields - злоглобальные константы же.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808683
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlесли перед вызовом любого метода не присвоить ей значение?если инициализация перед вызовом метода, то помести ее параметром в метод. И все тебя поймут сразу.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808684
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql,
Либо откажись от статического. Г.. код будет.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808692
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123iskatelsql
Код: c#
1.
public static int m = 3.14;


?
Не. Как я понял, он хочет проверять, чтобы статик был явно инициализирован из внешнего кода перед тем как его вызывают.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808697
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlА в статическом классе можно сделать как-то так, чтоб компилятор ругался "нефиг вызывать методы этого класса, не проинициализировав переменную", если перед вызовом любого метода не присвоить ей значение?
Любопытно узнать реальную задачу, а не вот это :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808699
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
"Перед вызовом" это уход от статического в обычный класс. Об этом я и написал.
У него нет логики в постановке.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808711
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В с++ нет статических классов, но есть макросы.
В шарпе нет макросов, но есть статические классы.
И оба мучаются))))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808715
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123В с++ нет статических классов, но есть макросы.
В обычных классах есть static методы и static переменные.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808723
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Есть обходные пути) . Но я про классы.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808747
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123В с++ нет статических классов, но есть макросы.
В шарпе нет макросов, но есть статические классы.
И оба мучаются))))
Вот и я ж говорю - хочется что-то расшарить между кодом - делайте просто синглетон, тем более, если есть DI контейнер, то он вам сам его сделает, и делать ничего не надо
Код: c#
1.
сontainerBuilder.RegisterType<MySingleton>().As<IMySingleton>().SingleInstance();
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808749
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatделайте просто синглетонмного букв которые не написать по памяти.
Global.param = "глобальная константа";
Короче и запоминать не надо.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808751
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Какой DI в десктопе.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808752
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Какой DI в десктопе.а что мешает?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808753
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro123Какой DI в десктопе.а что мешает?израт делать?
Хороший вкус мешает.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808754
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто тут еще не юзал static class)))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808756
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro123Какой DI в десктопе.а что мешает?
Лень ему мешает разобраться в том, что такое dependency injection.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808757
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухЛень ему мешает разобраться в том, что такое dependency injection.не, он вроде знает, только не понимает, что контейнер необязательно может быть из коробки ))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808761
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДмитрий МухЛень ему мешает разобраться в том, что такое dependency injection.не, он вроде знает, только не понимает, что контейнер необязательно может быть из коробки ))
для этого даже не надо книжку покупать, или скачивать



достаточно прям на странице содержание пролистать
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808762
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
вам все потрындеть вместо ответа на простой вопрос.
Если программист, то приходилось ли вам использовать глобальные переменные или статик классы?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808763
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А писатели про DI вместо темы про static class идите лесом в другую тему.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808765
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
Какой DI в десктопе.
Чо? У меня все консольные утилиты и те с DI пишутся.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808766
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123fkthat,
Какой DI в десктопе.
Чо? У меня все консольные утилиты и те с DI пишутся.
А у меня в квартире Газ!
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808767
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Shocker.Pro,
вам все потрындеть вместо ответа на простой вопрос.
Если программист, то приходилось ли вам использовать глобальные переменные или статик классы?
Парни, я может слепой, но где он выше этот вопрос задавал и мы уходили от ответа на него?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808768
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123А писатели про DI вместо темы про static class идите лесом в другую тему.
Да тема так-то не твоя. Заведи свою, и устанавливай там свои правила
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808770
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123А писатели про DI вместо темы про static class идите лесом в другую тему.
Да тема так-то не твоя. Заведи свою, и устанавливай там свои правила

это совет был, а не приказ).
У тебя и репозиторий свой написан. Теперь что? Статический класс не использовать?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808771
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДмитрий МухЛень ему мешает разобраться в том, что такое dependency injection.не, он вроде знает, только не понимает, что контейнер необязательно может быть из коробки ))
Хм.. А что, все контейнеры "из коробки" работают только для серверов? Я ни одного такого контейнера еще не видел.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808772
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123А писатели про DI вместо темы про static class идите лесом в другую тему.
Чудак не понимает как связана регистрация синглтона в контейнере с данной темой. Объясните ему :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808773
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДмитрий МухЛень ему мешает разобраться в том, что такое dependency injection.не, он вроде знает, только не понимает, что контейнер необязательно может быть из коробки ))
Он как тот, что "угадал все буквы, но не смог прочитать слово". В каждой теме "слышал звон, да не знаю где он"
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808774
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
да, да, пообсуждайте что я ем и завтракаю на завтрак.
Продолжайте!
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808775
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatShocker.Proпропущено...
не, он вроде знает, только не понимает, что контейнер необязательно может быть из коробки ))
Он как тот, что "угадал все буквы, но не смог прочитать слово". В каждой теме "слышал звон, да не знаю где он"
И до сих пор сидит на Java 1.3, судя по тому, что про non-blocking I/O не слышал

Или его вообще с Java выгнали давно.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808776
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришёл к нам :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808778
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatХм.. А что, все контейнеры "из коробки" работают только для серверов? Я ни одного такого контейнера еще не видел.А ты сможешь выковырять контейнер из ASP.NET Core и использовать в декстопе?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808780
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProfkthatХм.. А что, все контейнеры "из коробки" работают только для серверов? Я ни одного такого контейнера еще не видел.А ты сможешь выковырять контейнер из ASP.NET Core и использовать в декстопе?

Зачем выковыривать? Просто добавить ссылку на NuGet-пакет. Сказать какой?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808783
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
да, да, пообсуждайте что я ем и завтракаю на завтрак.
Продолжайте!
Я на завтрак завтракаю завтрак
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808784
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProfkthatХм.. А что, все контейнеры "из коробки" работают только для серверов? Я ни одного такого контейнера еще не видел.А ты сможешь выковырять контейнер из ASP.NET Core и использовать в декстопе?

А в чем проблема? Microsoft.Extensions.DependencyInjection - это отдельный пакет, который от ASP.NET вообще никак не зависит.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808786
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatShocker.Proпропущено...
А ты сможешь выковырять контейнер из ASP.NET Core и использовать в декстопе?

А в чем проблема? Microsoft.Extensions.DependencyInjection - это отдельный пакет, который от ASP.NET вообще никак не зависит.
Всю интригу испортил :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808789
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я на форуме для того и сижу, чтобы новые знания получать )
Иногда для этого достаточно задать глупый вопрос )
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808792
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123fkthat,
да, да, пообсуждайте что я ем и завтракаю на завтрак.
Продолжайте!
Я на завтрак завтракаю завтрак
уже лучше.)
А то я обобщу про тебя что ты только консоль пишешь)).
На вопрос про классы ведь не ответил.
Крутые профи собрались. Детский сад превалирует.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808793
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
using Microsoft.Extensions.DependencyInjection;

namespace ConsoleApp5
{
    internal class Program
    {
        private static void Main()
        {
            var services = new ServiceCollection();
            services.AddSingleton<Foo>();
            using var provider = services.BuildServiceProvider();
            var foo = provider.GetRequiredService<Foo>();
        }
    }

    internal class Foo
    {
    }
}
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808794
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНу я на форуме для того и сижу, чтобы новые знания получать )
Иногда для этого достаточно задать глупый вопрос )
А, ну тогда знай, что .NET Core можно использовать ещё и для создания приложений для различных устройств и интернета вещей :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808798
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухИли его вообще с Java выгнали давно.
Он, наверное, в Java разбирался так же, как сейчас в .Net ))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808800
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
С тобой хорошо деньги пилить.
Там где надо несколько простых проектов, ты предлагаешь замутить общий мега интерфейс одинаковый на всю больницу.
Его пилили долго, но зато одинаковый. Ни у кого такого репозитория нет така как не нужен. Но у тебя есть. И ты страшно обиделся что тебя не поняли.
У тебя проблема в простых решениях. Они у тебя сдожные.
Сейчас вот тебя с DI на личности понесло.
Автору скажи - выкинь класс и возьми DI!!!
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808802
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatДмитрий МухИли его вообще с Java выгнали давно.
Он, наверное, в Java разбирался так же, как сейчас в .Net ))я поржал выше над твоим конструктором в статик классе.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808803
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatДмитрий МухИли его вообще с Java выгнали давно.
Он, наверное, в Java разбирался так же, как сейчас в .Net ))
Вполне вероятно.

Предлагаю ещё модульные (unit) тесты обсудить.
Спорим, пациент зачвит, что хороший вкус мешает ему их писать :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808805
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthatпропущено...

Он, наверное, в Java разбирался так же, как сейчас в .Net ))я поржал выше над твоим конструктором в статик классе.
Над чем он поржал?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808813
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatОн, наверное, в Java разбирался так же, как сейчас в .Net ))три чела отсюда приходят в java периодически. Но ведут себя очень скромно. Там флуд не по теме не то что невозможен. Он неинтересен никому там.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808816
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123А то я обобщу про тебя что ты только консоль пишешь)).
ASP.NET Core так-то это и есть консольное приложение. Сюрприз? :))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808821
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123А то я обобщу про тебя что ты только консоль пишешь)).
ASP.NET Core так-то это и есть консольное приложение. Сюрприз? :))
А я разве про core? Я про десктоп.
Флудить перестанешь?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808822
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Автору скажи - выкинь класс и возьми DI!!!
Пациент противопоставляет классы DI. Феерично
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808824
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Автору скажи - выкинь класс и возьми DI!!!
Так я это ему уже сказал. Выкинь статик и сделай синглетон. А чтобы не морочится с синглетоном используй DI. Или у него все настолько просто, что все приложение из одного этого класса, который два целых складывает? Ты сам-то вообще синглетон корректно сможешь написать? С ленивой инициализацией, потокобезопасностью и отсутствием лишних оверхедов на блокировки (double null check)?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808827
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123Автору скажи - выкинь класс и возьми DI!!!
Так я это ему уже сказал. Выкинь статик и сделай синглетон. А чтобы не морочится с синглетоном используй DI. Или у него все настолько просто, что все приложение из одного этого класса, который два целых складывает? Ты сам-то вообще синглетон корректно сможешь написать? С ленивой инициализацией, потокобезопасностью и отсутствием лишних оверхедов на блокировки (double null check)?
Ни написать, ни нагуглить, ни в исходники посмотреть не сможет.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808828
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Попроси Дмитрий Мух тебя в java сводить.
Он пытается что там сказать, но неполучается.
Попробуйте вдвоем, про DI там ляпнуть.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808829
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatТак я это ему уже сказал.нет. Ты начал мне доказывать и в глаза смотреть.
Зачем?
Я считаю оверхедом.
А ты бутылку полез меня обсуждать как шантропа.
Вот и все.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808830
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
Попроси Дмитрий Мух тебя в java сводить.
Он пытается что там сказать, но неполучается.
Попробуйте вдвоем, про DI там ляпнуть.
А зачем мне жава - я ей не занимаюсь и не планирую заниматься. Ты еще предложи мне в ФоксПро сходить ))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808831
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Не нужна java - не пипикай про не как тут дети лейтенанта шмидта.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808838
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
Не нужна java - не пипикай про не как тут дети лейтенанта шмидта.
А где я про вашу джабу что-то говорил? :-O
Я, в отличии от тебя, рулю, в чем я разбираюсь, а в чем нет.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808851
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЯ, в отличии от тебяв отличии от меня ты профессор по распилу. Ты прав.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808856
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatрулю, в чем я разбираюсь, а в чем нет.полез учить статик классам, никогда не писавший ГУИ.
Да у тебя от ASP подходов давно мозк ничего не видит кроме main() {}
Нужна глобальная, а он конструктор воткнул и флаг инициализации.
Ты еще фабрику сюда подгони.
Утомил.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808857
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Теперь что? Статический класс не использовать?
да
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808861
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилPetro123Теперь что? Статический класс не использовать?
да
молодец. Один кто тут не флудит).
Кто ещё скажет что не использует у себя в проектах?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808862
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123полез учить статик классам, никогда не писавший ГУИ.
Да-да, подучи. А то тебя даже возможность наличия у него конструктора удивляет
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808863
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlЕсть статический класс, к примеру
тут есть мнение что нельзя его использовать.))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808864
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123fkthat,
Какой DI в десктопе.
Чо? У меня все консольные утилиты и те с DI пишутся.
ещё раз - ты джун в больших ГУИ-Десктоп приложениях.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808865
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatу него конструктора удивляет
меня нет. Я знаю об этом. А вот ты джун в десктопе.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808867
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthatу него конструктора удивляет
меня нет. Я знаю об этом. А вот ты джун в десктопе.
В рисовании форм на Дельфи? Дай-то бог таким же джуном и дальше оставаться
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808868
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatВ рисовании форм на Дельфи?ты про Java пофлудил. Теперь про дельфи.
Так держать. Не отличающий Core от десктопа и консоль от десктопа.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808869
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
А как тебе удаётся ООП продвигать в консольных утилитах. Расскажи)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808870
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
А как тебе удаётся ООП продвигать в консольных утилитах. Расскажи)
Милейший, скажите, вы дурак?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808871
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
А как тебе удаётся ООП продвигать в консольных утилитах. Расскажи)
Угомонись уже. Ты своей глупостью зафлудил уже все темы, и весь скуль превратил в один большой ПТ.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808875
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилPetro123Теперь что? Статический класс не использовать?
да+1 кстати

Статические классы только для методов расширения.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808876
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
как ты обиделся что тебя не поняли, бедный.
21876228
Переживешь. Иди к себе в ASP.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808878
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProСтатические классы только для методов расширения.
а как же математика? Пересчет координат?
Или всё таки есть исключения?
))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808880
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статические классы это замена макросов из С++
Милые мои дети.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808881
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

ООП как-то зависит от использования в вебе,консоли или десктопе?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808883
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Статические классы это замена макросов из С++
Милые мои дети.
серьёзно?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808885
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилPetro123,

ООП как-то зависит от использования в вебе,консоли или десктопе?
Конечно. В десктопе, например, нельзя DI, а в консоли нельзя ООП.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808887
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123а как же математика? Пересчет координат?
Да точно так же. Тебе есть разница вызывать ".Sin(x)" как статический метод статического класса, или как обычный метод объекта?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808892
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
Да. А ты серьезно ни ни статический?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808895
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Мальчик иди гуляй со своей консолью.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808909
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
А как тебе удаётся ООП продвигать в консольных утилитах. Расскажи)
Интересно, если пациенту рассказать про внедрение зависимостей и модульное тестирование PowerShell утилит, то ему совсем поплохеет?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808917
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Изопропил,
Да. А ты серьезно ни ни статический?
ну почему ни-ни

математика, логгеры...

а вот MessageBox.Show - только по приговору суда...
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808919
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAPetro123fkthat,
А как тебе удаётся ООП продвигать в консольных утилитах. Расскажи)
Интересно, если пациенту рассказать про внедрение зависимостей и модульное тестирование PowerShell утилит, то ему совсем поплохеет?

DI выяснилось, все-таки в консоли можно. Его только в десктопных приложениях нельзя.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808924
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилматематика, логгеры...
Для математики тоже имеет смысл нестатика. Хочу, например, экспоненту вычислять двумя разными способами (напр. таблица с нтерполяцией и ряд Тейлора), и способ этот в рантайме выбирать из списка, и точность при этом задавать из конфига. Наш Маг Десктопа тут, наверняка, просто возьмет и switch нарисует на полдюжины экранов. Ему так чувство прекрасного велит, или что там ему DI никак не дает использовать, уже не упомню.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808925
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропила вот MessageBox.Show - только по приговору суда...поподробнее. Не понял. У меня на нем просто обертка чтобы покороче было. А макросов нету).
Длинные тексты строковые константы тоже в статик классе.
Расшифровка сфероида координат в виде строки. Константа.

Изопропилну почему ни-ни

математика, логгеры...у вас своей математики нету?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808927
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
У тебя в каждом сообщении Petro. Срочно прими успокоительные.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808932
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
Мне кажется MessageBox все модифицируют от минимума до полного переписывания.
У меня минимум в виде статик метода в своем статическом. Внутри метода вызов его родного и нативного. Либо с кнопкой подробности из расширения винды дллки.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808955
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Изопропил,
Мне кажется MessageBox все модифицируют от минимума до полного переписывания.
У меня минимум в виде статик метода в своем статическом. Внутри метода вызов его родного и нативного. Либо с кнопкой подробности из расширения винды дллки.
А у тебя никаких мыслей нет, зачем MessageBox имело бы смысл делать нестатическим?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808961
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123Изопропил,
Мне кажется MessageBox все модифицируют от минимума до полного переписывания.
У меня минимум в виде статик метода в своем статическом. Внутри метода вызов его родного и нативного. Либо с кнопкой подробности из расширения винды дллки.
А у тебя никаких мыслей нет, зачем MessageBox имело бы смысл делать нестатическим?
Человек занят разработкой больших ГУИ-Десктоп приложений. Зачем ему о какой-то фигне думать?
В больших ГУИ-Десктоп приложених много кнопок, а, следовательно и баттонкликов, по которым надо много-много логики размазать.
Всё остальное оверхед и плохой вкус.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39808966
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Иди гуляй. Или садомазохист приставать?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810020
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123fkthat,
Какой DI в десктопе.
Чо? У меня все консольные утилиты и те с DI пишутся.
di контейнеры зло
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810027
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВdi контейнеры зло

Ты дженерики уже выучил? Или тоже зло?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810028
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatИзопропилматематика, логгеры...
Для математики тоже имеет смысл нестатика. Хочу, например, экспоненту вычислять двумя разными способами (напр. таблица с нтерполяцией и ряд Тейлора), и способ этот в рантайме выбирать из списка, и точность при этом задавать из конфига. Наш Маг Десктопа тут, наверняка, просто возьмет и switch нарисует на полдюжины экранов. Ему так чувство прекрасного велит, или что там ему DI никак не дает использовать, уже не упомню.
А как ты без статики вызовешь например эту прекрасную функцию?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810030
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВdi контейнеры зло

Ты дженерики уже выучил? Или тоже зло?
При чем тут дженерики?
ДИ контейнеры очередная модная тема и все
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810037
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВДИ контейнеры очередная модная тема и все
Много у тебя видать времени ушло чтобы проспаться. Этой "модной" теме уже лет 15 как, не меньше.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810042
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВfkthatпропущено...

Для математики тоже имеет смысл нестатика. Хочу, например, экспоненту вычислять двумя разными способами (напр. таблица с нтерполяцией и ряд Тейлора), и способ этот в рантайме выбирать из списка, и точность при этом задавать из конфига. Наш Маг Десктопа тут, наверняка, просто возьмет и switch нарисует на полдюжины экранов. Ему так чувство прекрасного велит, или что там ему DI никак не дает использовать, уже не упомню.
А как ты без статики вызовешь например эту прекрасную функцию?
Статический DllImport плюс нестатическая обертка к нему. В чем проблема?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810173
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123В с++ нет статических классов, но есть макросы.
В шарпе нет макросов, но есть статические классы.
И оба мучаются))))
Куда пропали ? https://ideone.com/Mp07ks

DI выглядит как Барон Мюнхгаузен, кусающий себя за жо вытаскивающий себя за волосы.

Далеко не везде нужно ЭТО совать.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810209
Hexag0v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SiemarglDI выглядит как Барон Мюнхгаузен, кусающий себя за жо вытаскивающий себя за волосы.

Далеко не везде нужно ЭТО совать.

Не надо там, где не надо. Свежий взгляд, Кэп. )
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810423
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProИзопропилпропущено...

да+1 кстати

Статические классы только для методов расширения.почему?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810431
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyShocker.Proпропущено...
+1 кстати

Статические классы только для методов расширения.почему?

"Наша песня хороша, начинай сначала" (с)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810439
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatAntonariyпропущено...
почему?

"Наша песня хороша, начинай сначала" (с)
Ага, это зачем ввели?
https://docs.microsoft.com/ru-ru/dotnet/csharp/whats-new/csharp-8#static-local-functions
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810454
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВАга, это зачем ввели?
https://docs.microsoft.com/ru-ru/dotnet/csharp/whats-new/csharp-8#static-local-functions
Слышал звон. Static local functions не имеюют никакого отношения к статическим классам или методом. Это просто локальные функции не имеющие доступа к замыканию. Для гарантии отсутствия их побочных эффектов. А статический класс это по сути самая что ни на есть глобальная переменная, которая прямо-таки тянет на то эти самые побочные эффекты наплодить. Но, лично мне, достаточно уже того, что со всем, что использует статические классы, возникает полная жоппа с юнит-тестированием. Тут уже на пяти страницах это обсуждалось, надоело повторяться.

Код: c#
1.
2.
3.
4.
5.
6.
class Person
{
    public DateTime DateOfBirth { get; private set; }

    public DateTimeSpan Age => DateTime.Now - DateOfBirth;
}



А теперь давай, расскажи, как ты будешь писать тесты на свойство "Age"
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810489
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На пяти страницах был срач с Петей, полный уныния и неочевидности. Точно так же не очевидна жопа с юнит-тестированием.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810492
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,
Да пусть не используют.
Джунам глобальные переменные использовать нельзя).
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810511
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjДжунам глобальные переменные использовать нельзя).
Только начиная с синьора. А лиды, так те вообще пишут все только на статических классах. Да.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810647
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще меня объяснения Шокера интересовали, он-то адекватно свои слова обосновывает.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810692
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatА теперь давай, расскажи, как ты будешь писать тесты на свойство "Age"mock сборка. с датами и без статики гемороя много.
и DateTime это не статический класс, даже не класс, по этому к чему он в этой теме? Поля статически у него имеются.
автор А статический класс это по сути самая что ни на есть глобальная переменная, которая прямо-таки тянет на то эти самые побочные эффекты наплодить. абсолютно любой тип, статический или нет, после инициализации является глобальным объектом, в котором хранится его TypeHandler, ссылки на методы и поля, у него есть адрес и т.д. По этому, любой тип по сути является глобальной переменной, не только статический.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810714
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesmock сборка. с датами и без статики гемороя много.
Какая еще мок-сборка? Все давно уже готовыми мок-фреймворками пользуются.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
[Fact]
public void TestAge()
{
    var mockClock = new Mock<ISystemClock>(); 
    mockClock.Setup(m => m.GetCurrentDateTime()).Returns(new DateTime(2019, 1, 1));
    var person = new Person(mockClock.Object);
    person.DateOfBirth = new DateTime(2000, 1, 1);
    person.Age.Should().Be(19);
}


Вот и все, никаких каких-то сборок.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810720
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesабсолютно любой тип, статический или нет, после инициализации является глобальным объектом, в котором хранится его TypeHandler, ссылки на методы и поля, у него есть адрес и т.д. По этому, любой тип по сути является глобальной переменной, не только статический.
Ога. И вообще любой объект (reference type) хранится в куче, котрая является одним огромным глобальным объектом. Этак можно вообще до единой теории всего дофилософствоваться.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810724
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatRoman Mejtesmock сборка. с датами и без статики гемороя много.
Какая еще мок-сборка? Все давно уже готовыми мок-фреймворками пользуются.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
[Fact]
public void TestAge()
{
    var mockClock = new Mock<ISystemClock>(); 
    mockClock.Setup(m => m.GetCurrentDateTime()).Returns(new DateTime(2019, 1, 1));
    var person = new Person(mockClock.Object);
    person.DateOfBirth = new DateTime(2000, 1, 1);
    person.Age.Should().Be(19);
}


Вот и все, никаких каких-то сборок.

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

Какая еще мок-сборка? Все давно уже готовыми мок-фреймворками пользуются.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
[Fact]
public void TestAge()
{
    var mockClock = new Mock<ISystemClock>(); 
    mockClock.Setup(m => m.GetCurrentDateTime()).Returns(new DateTime(2019, 1, 1));
    var person = new Person(mockClock.Object);
    person.DateOfBirth = new DateTime(2000, 1, 1);
    person.Age.Should().Be(19);
}



Вот и все, никаких каких-то сборок.

Скайна как-то это обозвал, уродством, кажется
Это вообще-то тупо тест.
А вот зачем понадобился интерфейс ISystemClock в реальном проекте - так и не ответили в тот раз.
Сложилось впечатление, что сначала напроектировали фигни, а потом с ней героически боролись.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810728
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И виновником помнится оказались не static-и, а люди, кто применял их фиг пойми как и зачем.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810765
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухЭто вообще-то тупо тест.
А вот зачем понадобился интерфейс ISystemClock в реальном проекте - так и не ответили в тот раз.
Сложилось впечатление, что сначала напроектировали фигни, а потом с ней героически боролись.
Понадобился в основном как раз для того, чтобы покрыть тестами весьма критическую часть проекта. Код все это совершенно не усложняет, ибо везде DI
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public interface ISystemClock {
    DateTime GetCurrentDateTime();
}

public class SystemClock: ISystemClock {
    public DateTime GetCurrentDateTime() => DateTime.Now;
}

containerBuilder.RegisterType<SystemClock>().As<ISystemClock>().SingleInstance();



Вот и весь код. Полдюжины строчек кода, которые решают кучу проблем с тестами. Под такую же херь, кстати, попадает еще всякая шляпа, типа Guid.New(), Random.Next() и т.п. - в общем вся хрень, результат которой ты никак не можешь в случае надобности контролировать.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810780
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Random имеет Seed, можно получить заданную последовательность псевдослучайных чисел, которая будет всегда постоянной...
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810795
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesRandom имеет Seed, можно получить заданную последовательность псевдослучайных чисел, которая будет всегда постоянной...
Это да. Но все равно через seed не получить какую-то предопределенную последовательность для теста. Впрочем, в крайних версиях фреймворка и коре рандом уже сделали с виртуальными методами. Примерно так же как в свое время сделали с HttpContext для тех же целей.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810799
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потом еще такая шляпа. Вполне может захотется сменить Random на секьюрный RandomNumberGenerator. Или вообще в одних местах использовать обычный, а в других секьюрный. С инжекцией это можно сделать букально за минуты.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39810919
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyShocker.Proпропущено...
+1 кстати

Статические классы только для методов расширения.почему?AntonariyВообще меня объяснения Шокера интересовали, он-то адекватно свои слова обосновывает.Ну, по большей части, уже объяснили конкретно.
Это как взрослый на основе своего опыта говорит ребенку "не носись", но сложно объяснить конкретно... потому что упадет и расквасит нос, потому что может попасть под машину, потому что собака рядом бегает без намордника....

В общем, поначалу вроде кажется, что нормально, а потом, спустя время, при рефакторинге натыкаешься на грабли
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811083
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
В общем, поначалу вроде кажется, что нормально, а потом, спустя время, при рефакторинге натыкаешься на грабли
Что грабли?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811112
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВ,
"Суслика видишь?")
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811164
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAntonariyпропущено...
почему?AntonariyВообще меня объяснения Шокера интересовали, он-то адекватно свои слова обосновывает.Ну, по большей части, уже объяснили конкретно.
Это как взрослый на основе своего опыта говорит ребенку "не носись", но сложно объяснить конкретно... потому что упадет и расквасит нос, потому что может попасть под машину, потому что собака рядом бегает без намордника....

В общем, поначалу вроде кажется, что нормально, а потом, спустя время, при рефакторинге натыкаешься на граблиВ общем, я понял:
Дмитрий МухИ виновником помнится оказались не static-и, а люди, кто применял их фиг пойми как и зачем.

Ложная тревога, все в порядке со статиками.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811278
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyВ общем, я понял:

А потом, если продукт взлетит, упрешься в перфоманс и вернешься к статикам.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811297
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВAntonariyВ общем, я понял:

А потом, если продукт взлетит, упрешься в перфоманс и вернешься к статикам.
Повернутые на оптимизации? Я в жизни не видал, чтобы проблемы с перформансом были именно из-за использования нестатиков вместо статиков. Вот из-за чего угодно видал, но только не из-за этого. Ты еще начни сравнивать сколько процессорных тактов на тот или иной вызов уходит.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811301
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Зато много раз видал, как из-за статиков утечки памяти возникают. Утечки памяти на платформе со сборкой мусора, Карл. Собственно, статик это фактически, наверное, единственный способ утечку памяти вызвать. Хотя, если, честно, то с синглетоном тоже такую бяку легко сделать.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811333
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВ,

Зато много раз видал, как из-за статиков утечки памяти возникают. Утечки памяти на платформе со сборкой мусора, Карл. Собственно, статик это фактически, наверное, единственный способ утечку памяти вызвать. Хотя, если, честно, то с синглетоном тоже такую бяку легко сделать.
А ну ка друг мой, приведи работающий пример утечки памяти из за статиков.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811339
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВпропущено...

А потом, если продукт взлетит, упрешься в перфоманс и вернешься к статикам.
Повернутые на оптимизации? Я в жизни не видал, чтобы проблемы с перформансом были именно из-за использования нестатиков вместо статиков. Вот из-за чего угодно видал, но только не из-за этого. Ты еще начни сравнивать сколько процессорных тактов на тот или иной вызов уходит.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
      static void StaticMethod()
        { }
       void NonStaticMethod()
        { }

        static void Main(string[] args)
        {
            Program program = new Program();
            StaticMethod();
            program.NonStaticMethod();


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// Program program = new Program();
	IL_0001: newobj instance void ConsoleApp2.Program::.ctor()
	IL_0006: stloc.0
	// StaticMethod();
	IL_0007: call void ConsoleApp2.Program::StaticMethod()
	// (no C# code)
	IL_000c: nop
	// program.NonStaticMethod();
	IL_000d: ldloc.0
	IL_000e: callvirt instance void ConsoleApp2.Program::NonStaticMethod()
	// (no C# code)


callvirt - Карл!
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811340
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВAntonariyВ общем, я понял:

А потом, если продукт взлетит, упрешься в перфоманс и вернешься к статикам.А я от них и не бегал) Наоборот, заметил панику в этой теме - "только для расширений!!11".
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811343
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюс
Код: c#
1.
2.
IL_0001: newobj instance void ConsoleApp2.Program::.ctor()
	IL_0006: stloc.0
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811356
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВfkthatЕвгенийВ,

Зато много раз видал, как из-за статиков утечки памяти возникают. Утечки памяти на платформе со сборкой мусора, Карл. Собственно, статик это фактически, наверное, единственный способ утечку памяти вызвать. Хотя, если, честно, то с синглетоном тоже такую бяку легко сделать.
А ну ка друг мой, приведи работающий пример утечки памяти из за статиков.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Foo {
    private static List<Foo> _theListOfAllFoo = new LIst<Foo>();

    private byte[] _someVeryLargeArray = new byte[100500];  

    public Foo() {
        _theListOfAllFoos.Add(this);
    }
}

for(var i = 0; i < 100500; i++) {
    new Foo();
}


Наиболее часто встречающаяся ситуация сродни этой - это подписаться на какой-нибудь статический ивент, а потом от него не отписаться.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811359
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще говоря вызов через инстанц.
1. Создание объекта - выделение памяти.
2. Сохранение ссылки на него в памяти.
3. Извлечение ссылки из памяти в стек (this передается первым параметром в метод)
4. Поиск ссылки на метод в таблице виртуальных методов
5. Вызов метода
6. GC собирает объект

Это те пункты, которых не будет при вызове статик метода.

Не нужен в методе this - делай статик!
Нужен простой публичный утилитный метод - суй его в статик класс.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811362
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Foo {
    private static List<Foo> _theListOfAllFoo = new LIst<Foo>();

    private byte[] _someVeryLargeArray = new byte[100500];  

    public Foo() {
        _theListOfAllFoos.Add(this);
    }
}

for(var i = 0; i < 100500; i++) {
    new Foo();
}



Ты привел очень сложный пример, попробуй так
Код: c#
1.
ulong[] arr = new ulong[ulong.MaxValue];


Не путай нехватку памяти и утечку памяти.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811363
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ callvirt - Карл!
Что мне твой машинный код - ты приведи реальный пример из жизни, когда бы статик/нестатик реально влиял на производительность. Так и представил себе какое-нибудь десктопное приложение тормозящее из-за того что там вместо статиков нестатики. А сallvirt ничего не означает - он используется для вызова любого инстанс-метода, хоть виртуального, хоть нет. Вызываются они при этои по разному. Иначе все методы были бы виртуальными, как в Java, кажись - кстати, что-то не слышал, чтобы они из-за этого изстрадались.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811364
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВНе нужен в методе this - делай статик!
Нужен простой публичный утилитный метод - суй его в статик класс.

И пиши все на статиках, блеат. Ога. :- D
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811365
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смахивает на юношеский максимализм\нигилизм. Все полезно в меру.
Мне кажется проблема больше не в статических методах, а в статических полях, а какой метод, статический или нет, это дело десятое
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811369
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВНе путай нехватку памяти и утечку памяти.
Там и есть именно утечка памяти. Но, поскольку, судя по твоему прошлому сообщению ты имеешь очень слабое представление о том как на самом деле в .NET работает выделение памяти и GC, то объяснять тебе тут это получится слишком долго. Начни лучше с чтения Рихтера, что ли.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811377
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesСмахивает на юношеский максимализм\нигилизм. Все полезно в меру.
Мне кажется проблема больше не в статических методах, а в статических полях, а какой метод, статический или нет, это дело десятое

Нет, не десятое. Статический метод означает что все что от него зависит должно его вызывать напрямую и, значит, зависеть от него напрямую. Есть принципы SOLID, и это их нарушает (тот, что "D"). Эти принципы придумали люди, которые намного умнее и опытнее и меня и тебя вместе взятых - мне этого уже достаточно, чтобы стараться им следовать.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811412
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВ callvirt - Карл!
Что мне твой машинный код - ты приведи реальный пример из жизни , когда бы статик/нестатик реально влиял на производительность. Так и представил себе какое-нибудь десктопное приложение тормозящее из-за того что там вместо статиков нестатики. А сallvirt ничего не означает - он используется для вызова любого инстанс-метода, хоть виртуального, хоть нет. Вызываются они при этои по разному. Иначе все методы были бы виртуальными, как в Java, кажись - кстати, что-то не слышал, чтобы они из-за этого изстрадались.

HttpClient
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811419
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatRoman MejtesСмахивает на юношеский максимализм\нигилизм. Все полезно в меру.
Мне кажется проблема больше не в статических методах, а в статических полях, а какой метод, статический или нет, это дело десятое

Нет, не десятое. Статический метод означает что все что от него зависит должно его вызывать напрямую и, значит, зависеть от него напрямую. Есть принципы SOLID, и это их нарушает (тот, что "D"). Эти принципы придумали люди, которые намного умнее и опытнее и меня и тебя вместе взятых - мне этого уже достаточно, чтобы стараться им следовать.

под нагрузкой IoC добавляет тормозов. лично я на затыки тут не натыкался, но, теоретически, они могут быть
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811422
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatRoman MejtesСмахивает на юношеский максимализм\нигилизм. Все полезно в меру.
Мне кажется проблема больше не в статических методах, а в статических полях, а какой метод, статический или нет, это дело десятое

Нет, не десятое. Статический метод означает что все что от него зависит должно его вызывать напрямую и, значит, зависеть от него напрямую. Есть принципы SOLID, и это их нарушает (тот, что "D"). Эти принципы придумали люди, которые намного умнее и опытнее и меня и тебя вместе взятых - мне этого уже достаточно, чтобы стараться им следовать.Эти принципы придумали люди, исходя из собственной конкретной практики, которая может в значительной мере отличаться от любой другой практики. Слепое и маниакальное следование всем этим принципам превращает хэлло ворлд в многослойное говно, в котором абстракция на абстракции едет и абстракцией погоняет, в результате чего вообще непонятно, как это работает, и куда заныкана реализация. А если еще и DI прикручено - вообще туши свет.

Как раз с таким хелловорлдом я на днях мучался. Тот, кто его писал, по-моему применил все принципы, паттерны и бест-кейсы, которые знал. Казалось бы, тривиальная задача - сохранить дюжину настроек в xml: формочка + save/load, да еще до сервера достучаться, чтобы логин/пароль проверить. И задача эта разбита на 4 (четыре, карл!) проекта. В одном модели и абстракции для UI, в другом модели и абстракции для хранилища, 3 и 4, соответственно UI (из одной формочки) и хранилище. В результате workflow этого говна совершенно невразумительно. Не говоря уж о том, что на все 4 кучки нужны ссылки в основном проекте.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811423
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachfkthatпропущено...


Нет, не десятое. Статический метод означает что все что от него зависит должно его вызывать напрямую и, значит, зависеть от него напрямую. Есть принципы SOLID, и это их нарушает (тот, что "D"). Эти принципы придумали люди, которые намного умнее и опытнее и меня и тебя вместе взятых - мне этого уже достаточно, чтобы стараться им следовать.

под нагрузкой IoC добавляет тормозов. лично я на затыки тут не натыкался, но, теоретически, они могут быть
да, да, ребята из stackoverflow по этой причине и не используют DI
правда нам до их нагрузок как пешком до Луны, но это же мелочи, правда? :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811444
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЭти принципы придумали люди, исходя из собственной конкретной практики, которая может в значительной мере отличаться от любой другой практики.
А инженеры Тойоты придумали что надо заправлять её 98-м бензином, потому что им это во сне приснилось. Но мы-то умнее их и лучше их машину знаем - так что будем экономить и в соседнем колхозе заливать 76-й.

Вот же белять, российский менталитет. Напиши человеку аршинным капсом, что сюда лезть нельзя, потому что током долбанет, но, он все равно решит, что ему виднее, чем тому, кто это писал и обязательно туда полезет.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811445
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesСмахивает на юношеский максимализм\нигилизм. Все полезно в меру.
Мне кажется проблема больше не в статических методах, а в статических полях, а какой метод, статический или нет, это дело десятое
Статические поля - сразу же возможная засада с thread-safety.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811449
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachHttpClient

Cерьезно? HttpClient потенциально тормозной не из-за того что в интернет лезет, а из-за того, что он не статический? Ты хоть понял, что ты за бугагос сейчас написал?

Кстати, это еще один класс, который у нас везде завернут в обертку с интерфейсом. Ибо писать и гонять юнит-тесты, которые зависят от каких-то других сетевых сервисов, это было бы вообще писец. Точнее это были бы вообще даже близко не юнит тесты.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811453
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachлично я на затыки тут не натыкался
Первый же запрос к i/o (БД, хттп, файловая система) накроет все дополнительные расходы на виртуальные вызовы, DI и подобное, как бык овцу.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811456
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatAntonariyЭти принципы придумали люди, исходя из собственной конкретной практики, которая может в значительной мере отличаться от любой другой практики.
А инженеры Тойоты придумали что надо заправлять её 98-м бензином, потому что им это во сне приснилось. Но мы-то умнее их и лучше их машину знаем - так что будем экономить и в соседнем колхозе заливать 76-й.А я тоже могу придумать якобы аналогию, которая на самом деле нифига не аналогия, и выставить себя дураком. Но я-то умнее, поэтому делать этого не буду.

Автомобиль не поставляется в виде конструктора "сделай сам", в отличие от нашей предметной области.

fkthatВот же белять, российский менталитет. Напиши человеку аршинным капсом, что сюда лезть нельзя, потому что током долбанет, но, он все равно решит, что ему виднее, чем тому, кто это писал и обязательно туда полезет.Глупость, написанная капсом, умностью не становится.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811457
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatlove_bachHttpClient

Cерьезно? HttpClient потенциально тормозной не из-за того что в интернет лезет, а из-за того, что он не статический? Ты хоть понял, что ты за бугагос сейчас написал?

Кстати, это еще один класс, который у нас везде завернут в обертку с интерфейсом. Ибо писать и гонять юнит-тесты, которые зависят от каких-то других сетевых сервисов, это было бы вообще писец. Точнее это были бы вообще даже близко не юнит тесты.

Ну вашето это не я только натыкался. Народ юзал Статик, и МС пошёл навстречу страждущим и сделал фабрику - тот же Статик, только с интеллигентным лицом
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811466
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyГлупость, написанная капсом, умностью не становится.

AntonariyНо я-то умнее
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811487
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatlove_bachлично я на затыки тут не натыкался
Первый же запрос к i/o (БД, хттп, файловая система) накроет все дополнительные расходы на виртуальные вызовы, DI и подобное, как бык овцу.

ну, есть же поддержка async в проваедерах БД, хттп...
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811490
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче, я против статиков, я за IoC, но, есть же случаи, когда у кого-то, когда это не подходит :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811492
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachно, есть же случаи, когда у кого-то, когда это не подходит :)
причины неиспользования срорее другие
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811497
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
love_bachкороче, я против статиков, я за IoC, но, есть же случаи, когда у кого-то, когда это не подходит :)
А как вы напишете это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
// mathematical.hpp
 
namespace Constants
{
  inline constexpr double pi{ 3.14159 };
  inline constexpr double avogadro{ 6.0221413e23 };
  inline constexpr double my_gravity{ 9.2 };
}
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811504
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjlove_bachкороче, я против статиков, я за IoC, но, есть же случаи, когда у кого-то, когда это не подходит :)
А как вы напишете это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
// mathematical.hpp
 
namespace Constants
{
  inline constexpr double pi{ 3.14159 };
  inline constexpr double avogadro{ 6.0221413e23 };
  inline constexpr double my_gravity{ 9.2 };
}



скорее всего не на C#
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811510
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatА сallvirt ничего не означает - он используется для вызова любого инстанс-метода, хоть виртуального, хоть нет.
Кстати, нет. Вызов прямо на результате конструктора приводит к использованию call вместо callvirt:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
using System;
namespace test2
{
  class Program
  {
    public static void Main(string[] args)
    {
      new Program().Foo();
    }
    public void Foo() => Console.WriteLine("done");
  }
}


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
.method public hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Размер кода:       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  newobj     instance void test2.Program::.ctor()
  IL_0006:  call       instance void test2.Program::Foo()
  IL_000b:  nop
  IL_000c:  ret
} // end of method Program::Main


Оппонент просто какбы намекает, что если вдруг с какого-то мегаперепоя корвалолом все инстанстные вызовы заменятся на статики, то будет массовая замена вызовов callvirt на call. Цена замены - несколько тиков. В масштабах страны, сами понимаете результат.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811511
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachfkthatпропущено...

Первый же запрос к i/o (БД, хттп, файловая система) накроет все дополнительные расходы на виртуальные вызовы, DI и подобное, как бык овцу.

ну, есть же поддержка async в проваедерах БД, хттп...
Асинк как-то ускорит выполнение самого запроса?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811512
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatlove_bachпропущено...


ну, есть же поддержка async в проваедерах БД, хттп...
Асинк как-то ускорит выполнение самого запроса?Не, только если на Go переписать :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811522
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ололо, оптимизаторы тактов вызова метода. Объясняйте мне тогда вот это:
Код: 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.
    internal class Program
    {
        private static void Static()
        {
        }

        private static void Main(string[] args)
        {
            var prog = new Program();
            var n = 100500000;
            Console.WriteLine("Static:     {0}", Measure(() => Repeat(n, Static)));
            Console.WriteLine("Not static: {0}", Measure(() => Repeat(n, prog.NotStatic)));
        }

        private static void Repeat(int n, Action action)
        {
            for (var i = 0; i < n; i++)
            {
                action();
            }
        }

        private static TimeSpan Measure(Action action)
        {
            var sw = new Stopwatch();
            sw.Start();
            action();
            sw.Stop();
            return sw.Elapsed;
        }

        private void NotStatic()
        {
        }
    }



Код: powershell
1.
2.
Static:     00:00:00.5190127
Not static: 00:00:00.4082426



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

Код: c#
1.
2.
3.
        public virtual void Virtual()
        {
        }



Код: powershell
1.
2.
3.
Static:     00:00:00.3154586
Not static: 00:00:00.2473785
Virtual:    00:00:00.2532572



Даже виртуальный метод имеет статика в хвост и гриву
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811532
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatОбъясняйте мне тогда вот это
Зачем? Мне это вообще по барабану. Моя деятельность оценивается несколько по-другому.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811533
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
love_bachWebPrjпропущено...

А как вы напишете это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
// mathematical.hpp
 
namespace Constants
{
  inline constexpr double pi{ 3.14159 };
  inline constexpr double avogadro{ 6.0221413e23 };
  inline constexpr double my_gravity{ 9.2 };
}



скорее всего не на C#
А я думал
Код: sql
1.
2.
static class Constants
{
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811538
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И даже так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    internal interface IProgram
    {
        void Interface();
    }

    internal class Program : IProgram
    {
        public void Interface()
        {
        }



Код: powershell
1.
2.
3.
4.
Static:     00:00:00.3932091
Not static: 00:00:00.2832406
Virtual:    00:00:00.2452205
Interface:  00:00:00.2511343



Статик самый медленный. Причем, что интересно, что вызовы виртуального метода и метода интерфейса быстрее чем обычного.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811540
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныfkthatОбъясняйте мне тогда вот это
Зачем? Мне это вообще по барабану. Моя деятельность оценивается несколько по-другому.
Ну тогда можешь скипать. Просто тут был пассажир, который объяснял что статик метод лучше, потому что его вызов быстрее. Даже какой-то машинный код тут в доказательство писал.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811542
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мухfkthatпропущено...

Асинк как-то ускорит выполнение самого запроса?Не, только если на Go переписать :)
а чем там то он поможет
у го свои тараканы
все издали кажется красиво
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811544
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjА я думал
Код: sql
1.
2.
static class Constants
{



Код: 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.
public interface IMathConstant {
    double Value {get;}
}

public class PIMathConstants: IMathConstants {
   public double Value => 3.14159;
}

public class GravyMathConstant: IMathConstant {
   public double Value => 9.8;
}

public interface IMathConstantLocator {
   IMathConstant Get(string name);
}

public class MathConstantLocator: IMathConstantLocator {
   privat IComponentContext _ctx;
   public MathConstantLocator(IComponentContext ctx) { _ctx = ctx; }
   public IMathConstant Get(string name) => _ctx.ResolveNamed(name);
}

containerBuilder.RegisterType<PIMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<GravyMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<MathConstantLocator>().As<IMathConstantLocator>();
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811559
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вундербар
fkthatWebPrjА я думал
Код: sql
1.
2.
static class Constants
{



Код: 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.
public interface IMathConstant {
    double Value {get;}
}

public class PIMathConstants: IMathConstants {
   public double Value => 3.14159;
}

public class GravyMathConstant: IMathConstant {
   public double Value => 9.8;
}

public interface IMathConstantLocator {
   IMathConstant Get(string name);
}

public class MathConstantLocator: IMathConstantLocator {
   privat IComponentContext _ctx;
   public MathConstantLocator(IComponentContext ctx) { _ctx = ctx; }
   public IMathConstant Get(string name) => _ctx.ResolveNamed(name);
}

containerBuilder.RegisterType<PIMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<GravyMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<MathConstantLocator>().As<IMathConstantLocator>();


Главное, в процессе создания такой нетленки не забыть вот про Вундербар
fkthatWebPrjА я думал
Код: sql
1.
2.
static class Constants
{



Код: 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.
public interface IMathConstant {
    double Value {get;}
}

public class PIMathConstants: IMathConstants {
   public double Value => 3.14159;
}

public class GravyMathConstant: IMathConstant {
   public double Value => 9.8;
}

public interface IMathConstantLocator {
   IMathConstant Get(string name);
}

public class MathConstantLocator: IMathConstantLocator {
   privat IComponentContext _ctx;
   public MathConstantLocator(IComponentContext ctx) { _ctx = ctx; }
   public IMathConstant Get(string name) => _ctx.ResolveNamed(name);
}

containerBuilder.RegisterType<PIMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<GravyMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<MathConstantLocator>().As<IMathConstantLocator>();


Главное, в процессе создания такой нетленки не забыть вот про это .
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811563
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
Ну ты не сравнивай "Hello factorial" и приложения, которые по десятку лет пишут, развивают и дорабатывают. Я бы мог кучу преимуществ своего примера кода привести над твоим static Consts, но, судя по твоей ссылке у тебя представление о разработке как раз такими "Hello factorial" и ограничивается, т.ч. тебе это все равно будет без пользы.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811580
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто победил, потом отпишитесь
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811582
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatСон Веры Павловны
Ну ты не сравнивай "Hello factorial" и приложения, которые по десятку лет пишут, развивают и дорабатывают . Я бы мог кучу преимуществ своего примера кода привести над твоим static Consts, но, судя по твоей ссылке у тебя представление о разработке как раз такими "Hello factorial" и ограничивается, т.ч. тебе это все равно будет без пользы.

чо то ты запизделси
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811587
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachчо то ты запизделси
Иди себе с миром писать еще один факториал на статиках :))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811591
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да блин, задал я вопросик... Семь страниц. одного заблокировали... Я вас уже что-то боюсь.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811595
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlДа блин, задал я вопросик... Семь страниц. одного заблокировали... Я вас уже что-то боюсь.
не бойся... это от хорошой жизни, ну и с возрастом... на словоблудие тянет
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811623
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser,
С возрастом на максимализм и нравоучения тянет))
Это нельзя, этому лоботомию, этот с***а, тут я бы уволился и т.д.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811648
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatAntonariyГлупость, написанная капсом, умностью не становится.

AntonariyНо я-то умнее

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

Да я и не спорю. Тут один ты у нас умный. Даже сам об этом написал.

AntonariyНо я-то умнее

Забыл, наверное, дописать "всех".
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811717
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatAntonariyКажется, ты что-то осмысленное хотел написать, но хватило лишь на смайлик.
А впрочем, правильный подход. Смайликами очередную глупость не ляпнешь.

Да я и не спорю. Тут один ты у нас умный. Даже сам об этом написал.

AntonariyНо я-то умнее

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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    internal interface IProgram
    {
        void Interface();
    }

    internal class Program : IProgram
    {
        public void Interface()
        {
        }



Код: powershell
1.
2.
3.
4.
Static:     00:00:00.3932091
Not static: 00:00:00.2832406
Virtual:    00:00:00.2452205
Interface:  00:00:00.2511343



Статик самый медленный. Причем, что интересно, что вызовы виртуального метода и метода интерфейса быстрее чем обычного.
Бред какой то. Протестируй нормально.

В любом случае, при такой разнице в пределах погрешности, скорость не аргумент. {C# и скорость ахах....}
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811787
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglБред какой то. Протестируй нормально.

Код я привел. Можешь сам его собрать, запустить и посмотреть

SiemarglВ любом случае, при такой разнице в пределах погрешности, скорость не аргумент.


Я тоже самое писал. Только некоторые стали тут доказывать что разница в несколько тактов на вызове метода это писец как важно.

SiemarglC# и скорость ахах.


Есть ряд случаев, когда нетовский рантайм может уделать по производительности unmanaged языки.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811797
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Siemargl,
Да. Скорость не аргумент в данной теме.
Только как дымовая завеса при обсуждении.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811805
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjSiemargl,
Да. Скорость не аргумент в данной теме.
Только как дымовая завеса при обсуждении.

Мне, однако, все-таки, пипец любопытно стало - как так выходит, что статический метод по вызову самый медленный. Релизная сборка, чистый запуск из командной строки - и он стабильно отстаёт по скорости от любого другого вызова в полтора раза.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811817
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat, вы жо умный посмотрите во что скомпилилось... происки оптимизатора?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811821
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat, вот тут простым языком немного общих рассуждений на эту тему... х.з. ни когда не приходилось биться за микросекунды... в основном исходят из здравого смысла, семантики самой задачи, а не тупо следуют скрижалям... так что спор инстанс вс статик - это спор между "тупоконечниками и остроконечниками"
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811829
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserfkthat, вы жо умный посмотрите во что скомпилилось... происки оптимизатора?
Оптимизация дефолтная. Для чистоты эксперимента поставил еще аттрибуты
Код: c#
1.
[MethodImpl(MethodImplOptions.NoInlining)]


и даже попробовал сделать наоборот
Код: c#
1.
[MethodImpl(MethodImplOptions.AggressiveInlining)]


Результаты одни и те же, причем аттрибуты эти, похоже, вообще никак не влияют (м.б. в нынешней версии компилятора они вообще игнорируются)

Собирал под .net core 3 и под обычный .net 4.6 и никакой разницы - везде статик тормозит.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811830
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat,
Не знаю. Никогда не интересовало.
Как тут сказали, мне платят за другие вопросы)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811835
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserfkthat, вот тут простым языком немного общих рассуждений на эту тему

авторIn theory, a static method should perform slightly better than an instance method

Ну вот в том-то и дело, что "in theory", а вот я смотрю и вижу сейчас, что все совсем наоборот. Разница, конечно, совершенно ерундовая, как я уже говорил я бы даже внимания обращать на неё не стал бы никогда, но мне вот интересно, почему все-таки так получается.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811841
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВAntonariyВ общем, я понял:

А потом, если продукт взлетит, упрешься в перфоманс и вернешься к статикам.
ваш взлетел? что за продукт? любопытно, какую архитектура и принципы разработки используете?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811889
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухЕвгенийВпропущено...

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

ваш взлетел? что за продукт? любопытно, какую архитектура и принципы разработки используете?
мазохист

Мазохизм - склонность получать удовольствие, испытывая унижения, насилие или мучения .

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

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

счас будет тебе делать мозги, а ты получишь от этого кайф
Что мне будут делать? Выражайся, если можно, понятным языком.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811902
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

е***ь мозг всякими лаунчерами
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811903
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДмитрий Мух,

е***ь мозг всякими лаунчерами
ЕвгенийВ - это же не ВМоисеев. Я надеюсь :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811906
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухViPRosДмитрий Мух,

е***ь мозг всякими лаунчерами
ЕвгенийВ - это же не ВМоисеев. Я надеюсь :)
ааааааааааа
перепутал, блин :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811972
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВпропущено...

А ну ка друг мой, приведи работающий пример утечки памяти из за статиков.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Foo {
    private static List<Foo> _theListOfAllFoo = new LIst<Foo>();

    private byte[] _someVeryLargeArray = new byte[100500];  

    public Foo() {
        _theListOfAllFoos.Add(this);
    }
}

for(var i = 0; i < 100500; i++) {
    new Foo();
}


Наиболее часто встречающаяся ситуация сродни этой - это подписаться на какой-нибудь статический ивент, а потом от него не отписаться.
Этот не утечка памяти. Здесь все указатели на выделенную память сохранены и могут быть освобождены в любой момент.
Утечка - это выделенная память, на которую нет указателей и программа потеряла над ней контроль.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811973
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatSiemarglБред какой то. Протестируй нормально.
Код я привел. Можешь сам его собрать, запустить и посмотреть

Проверил, добавил тестирование вызова стат.класса, попробовал убрать накладные от лямбды, исключить выбрасывание кода оптимизатором.
У меня в виртуалке (VS2017, release, NET4.6)
Not static: 00:00:00.3894198
Virtual: 00:00:00.5584478
Interface Call: 00:00:00.3800740
Static: 00:00:00.3692603
В ideone https://ideone.com/qTPeHC
Not static: 00:00:00.1811481
Virtual: 00:00:00.2084212
Interface Call: 00:00:00.1812678
Static: 00:00:00.1848647
Собственно, только виртуальный вызов заметно медленнее, остальное в пределах погрешностей
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811974
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЭтот не утечка памяти. Здесь все указатели на выделенную память сохранены и могут быть освобождены в любой момент.
Утечка - это выделенная память, на которую нет указателей и программа потеряла над ней контроль.

Объекты Foo никогда освобождены не будут, потому что указатели на них сохранены в статической (т.е. глобальной переменной). Пока их оттуда руками не уберешь, то они так и будут там висеть, пока приложение не завершится. Если такая шляпа происходит, например в веб-приложении, то в итоге будет жопа - я на практике такое наблюдал и даже не раз. А так-то можно сказать, что, типа, да, утечек вообще никогда не бывает, потому что из приложения, типа, все равно когда-нибудь выйдем и память при этом освободится, по-твоему так, что ли?

Есть еще более смешная известная шляпа, называется "воскрешение объекта" ("object resurrection"). Правда, это уже из разряда извращений.

Код: c#
1.
2.
3.
4.
5.
6.
7.
public class Foo {
    private static Foo _foo;

    ~Foo() {
        _foo = thiis;
    }
}



Объект, уже идя под сборку мусора, сам себя вытягивает за волосы. :))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811982
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthatSiemarglЭтот не утечка памяти. Здесь все указатели на выделенную память сохранены и могут быть освобождены в любой момент.
Утечка - это выделенная память, на которую нет указателей и программа потеряла над ней контроль.

Объекты Foo никогда освобождены не будут, потому что указатели на них сохранены в статической (т.е. глобальной переменной). Пока их оттуда руками не уберешь, то они так и будут там висеть, пока приложение не завершится. Если такая шляпа происходит, например в веб-приложении, то в итоге будет жопа - я на практике такое наблюдал и даже не раз. А так-то можно сказать, что, типа, да, утечек вообще никогда не бывает, потому что из приложения, типа, все равно когда-нибудь выйдем и память при этом освободится, по-твоему так, что ли?
Именно это и нужно программисту при статик.
Освобождение памяти при завершении процесса.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811997
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

Результаты тестирования отменяются, оптимизатор выкинул _ВСЁ_

Код: 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.
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Размер кода:       141 (0x8d)
  .maxstack  3
  .locals init ([0] class Program prog,
           [1] int64 result)
  IL_0000:  newobj     instance void Program::.ctor()
  IL_0005:  stloc.0
  IL_0006:  ldc.i4     0x5fd8220
  IL_000b:  conv.i8
  IL_000c:  stloc.1
  IL_000d:  ldloca.s   result
  IL_000f:  call       void SClass::StatClassCall(int64&)
  IL_0014:  ldstr      "Not static: {0}"
  IL_0019:  ldloc.0
  IL_001a:  ldloca.s   result
  IL_001c:  callvirt   instance valuetype [mscorlib]System.TimeSpan Program::NonStaticCall(int64&)
  IL_0021:  box        [mscorlib]System.TimeSpan
  IL_0026:  call       void [mscorlib]System.Console::WriteLine(string,
                                                                object)
  IL_002b:  ldstr      "Virtual: {0}"
  IL_0030:  ldloc.0
  IL_0031:  ldloca.s   result
  IL_0033:  callvirt   instance valuetype [mscorlib]System.TimeSpan Program::VirtCall(int64&)
  IL_0038:  box        [mscorlib]System.TimeSpan
  IL_003d:  call       void [mscorlib]System.Console::WriteLine(string,
                                                                object)

...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811999
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет, показалось с непросыпу
Дебажная сборка тоже самое распределение
Not static: 00:00:02.1452922
Virtual: 00:00:02.2355484
Interface Call: 00:00:01.3028084
Static: 00:00:01.5658457
NNNs - 502500001, 0
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812000
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, вчера, 17:28 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312102&msg=21882180][21882180]
>е***ь мозг всякими лаунчерами
<Интересно, чем же тебя так достал пускач. У меня инфосистема реализуется многими приложениями, а к ним надо иметь доступ, их надо запускать, надо смотреть за их изменениями. Этим и занимается лаунчар. Что здесь плохого - то?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812012
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjИменно это и нужно программисту при статик.
Освобождение памяти при завершении процесса.
А серверных приложений у нас не бывает вообще? Или ты уроки, где про них рассказывали, прогулял? :))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812059
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrj,

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

Код: 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;
   }

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



Пользователь стопиццот раз откроет и закроет эту форму и все стопиццот экземпляров её объекта останутся висеть в памяти до конца работы приложения. Но это ведь тоже не утечка памяти, так ведь?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812086
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat,
На оба твоих поста короткий ответ
1. Веб обсуждается в другой ветке.
2. Я глобальный таймер не ставлю.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812087
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WebPrjfkthatпропущено...


Объекты Foo никогда освобождены не будут, потому что указатели на них сохранены в статической (т.е. глобальной переменной). Пока их оттуда руками не уберешь, то они так и будут там висеть, пока приложение не завершится. Если такая шляпа происходит, например в веб-приложении, то в итоге будет жопа - я на практике такое наблюдал и даже не раз. А так-то можно сказать, что, типа, да, утечек вообще никогда не бывает, потому что из приложения, типа, все равно когда-нибудь выйдем и память при этом освободится, по-твоему так, что ли?
Именно это и нужно программисту при статик.
Освобождение памяти при завершении процесса.повторяю. Это десктоп.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812090
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrj,

У тебя очень странные понятия о том, что такое "утечка памяти". Ладно, бог с тобой, переубеждать не буду - мне за это денег не платят.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812098
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812099
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrj,

Предлагаю тогда обратиться к разработчикам .NET c предложением вообще убрать оттуда GC - зачем там этот лишний оверхед.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812101
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthatWebPrj,

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

Предлагаю тогда обратиться к разработчикам .NET c предложением вообще убрать оттуда GC - зачем там этот лишний оверхед.оверхед это когда нет баланса преимущества - недостатки.
перечитал пять раз, ни фига не понял фразы
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812106
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух,
Перевожу.
Нет баланса, это например, преимуществ не имеем или не требуется, а недостатки в наличии.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812109
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>ViPRos, вчера, 17:28 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312102&msg=21882180][21882180]
>е***ь мозг всякими лаунчерами
<Интересно, чем же тебя так достал пускач. У меня инфосистема реализуется многими приложениями, а к ним надо иметь доступ, их надо запускать, надо смотреть за их изменениями. Этим и занимается лаунчар. Что здесь плохого - то?
да ничего
просто мы это уже давно знаем
а тут Мух спросил именно про это (мне показалось)
оказалось вопрос был обращен не к тебе
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812110
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatWebPrjИменно это и нужно программисту при статик.
Освобождение памяти при завершении процесса.
А серверных приложений у нас не бывает вообще? Или ты уроки, где про них рассказывали, прогулял? :))
так и хотся бипнуть
мало того что фигни морозит, да еще и других пытается прибить
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812112
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjДмитрий Мух,
Перевожу.
Нет баланса, это например, преимуществ не имеем или не требуется, а недостатки в наличии.
Дак найдите себе этот самый баланс, в чём проблема?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812114
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух,
У меня нет проблемы).
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812135
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухWebPrjпропущено...
оверхед это когда нет баланса преимущества - недостатки.
перечитал пять раз, ни фига не понял фразыЕсть ручное управление, есть ARC, есть GC.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812144
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatWebPrj,

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

Код: 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
Инициализация статического класса
    #39812189
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjоверхед - это когда нет баланса между преимущества ми и недостатк ам и
если куча преимуществ - оверхед
если множество недостатков - оверхед

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

Код: c#
1.
2.
3.
static сlass Foo {
   public static int TheAnswerToEverything = 42;
}



и

Код: c#
1.
2.
3.
4.
5.
6.
7.
static сlass Foo {
   public static int TheAnswerToEverything = 42;

   static Foo() {
      // Это действительно пустой конструктор
   }
}
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812219
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrj2. Я глобальный таймер не ставлю.
Я понял. Ты герой-одиночка, что сам без команды пишет свою никому не нужную нетленку.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812230
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthatТы герой-одиночка, что сам без команды пишет свою никому не нужную нетленку.
Как быстро ты съехал на личности. Буквально на 4-м ходу в шахматы.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812231
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух,
Если вы сказали что непонимаете, зачем вы пытаетесь понять?
Siemargl все понял сразу).
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812233
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatWebPrj2. Я глобальный таймер не ставлю.
Я понял. Ты герой-одиночка, что сам без команды пишет свою никому не нужную нетленку. когда так отвечает ни разу не писавший десктоп, это смешно).
Продолжайте вдвоем.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812239
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjSiemargl все понял сразу).Крочавчег.
Зачастую случается угадывать то, что подразумевает человек, даже если он полную фигню говорит


Вот опять, что за забавный вопрос:WebPrjЕсли вы сказали что непонимаете, зачем вы пытаетесь понять?"Если вы сказали что непонимаете, зачем вы пытаетесь понять?
Я написал, что не понимаю именно за тем, чтобы получить объяснение.
Вы с логикой вообще дружите?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812241
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123когда так отвечает ни разу не писавший десктоп, это смешно).
Куда уж нам, дилетантам, до вашего десктопа и вашего "Button-click Driven Development".
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812243
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthatпропущено...

Я понял. Ты герой-одиночка, что сам без команды пишет свою никому не нужную нетленку. когда так отвечает ни разу не писавший десктоп, это смешно).
Продолжайте вдвоем.
Неделю в бане с нетерпением ждал, чтобы как попугай продолжить: "Ты десктоп не писал, десктоп не писал..." :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #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
Инициализация статического класса
    #39812425
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВfkthat,
Код: c#
1.
 Console.WriteLine("Not static: {0}", Measure(() => Repeat(n, ()=> { var p = new Program(); p.NotStatic(); })));



Сравнение будет некорректное потому что будет сравниваться не вызов с вызовом а создание объекта + вызов с просто вызовом.
Еще будет напрягаться GC.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812435
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЕще будет напрягаться GC.
Ну, GC работает с очень низким приоритетом, т.ч. даже когда он напрягается, то старается не сильно напрягать само приложение.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812444
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
ОК. Будешь вторым балаболом на всем sql.ru.

Петро, ты расскажи лучше почтенной публике, за что тебя из Жавы выгнали - ты там тоже везде статические баттон-клики внедрить пытался?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812446
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВЕще будет напрягаться GC.
Ну, GC работает с очень низким приоритетом, т.ч. даже когда он напрягается, то старается не сильно напрягать само приложение.
тебе самое время почитать про сборку мусора :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812451
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВтебе самое время почитать про сборку мусора :)
Что не так? Сборщик мусора просыпается, когда приложение простаивает. Для тебя это секрет?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812455
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мирные жители ложатся спать, мафия просыпается
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812467
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesмирные жители ложатся спать, мафия просыпается))) +1
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812469
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123fkthat,
ОК. Будешь вторым балаболом на всем sql.ru.

Петро, ты расскажи лучше почтенной публике, за что тебя из Жавы выгнали - ты там тоже везде статические баттон-клики внедрить пытался?
я тебя после фильтра вижу только квадратиком. Без текста)).
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812497
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВтебе самое время почитать про сборку мусора :)
Что не так? Сборщик мусора просыпается, когда приложение простаивает. Для тебя это секрет?
Сборщик мусора запускается только когда система не может выделить память, если все сделать на статиках, он не запустится ни разу.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812501
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем вообще думать о том, когда запускается GC? это не ваша проблема, думать об этом не нужно, думать нужно о другом, о высоком
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812504
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesзачем вообще думать о том, когда запускается GC? это не ваша проблема, думать об этом не нужно, думать нужно о другом, о высоком
Например пишешь экранное видео с 60 FPS, 1920 * 1080 * 4 * 60 = 497664000 байт/сек нужно переработать. При чем на каком нибудь целероне с 2 гигами оперативки.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812505
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5 страниц о милисекундах. Теперь о сборщике.
Продолжайте.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812507
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВпишешь экранное видеовсегда можно найти задачу где потребуется затачивать свой код под ограниченные ресурсы. Тема разве про это?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812510
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ если все сделать на статиках
что это означает?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812519
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВСборщик мусора запускается только когда система не может выделить память, если все сделать на статиках, он не запустится ни разу.
Это не сборщик мусора запускается, это у тебя в голове все очень запущено. Почитать про GC следует как раз тебе. Как я уже писал - попробуй с Рихтера начать "CLR via C#" или "Applied Microsoft .NET Framework".
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812543
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosЕвгенийВ если все сделать на статиках
что это означает?
Примерно это.

Код: 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.
        class MyMath
        {
            private double _val;
            public MyMath(double val)
            {
                _val = val;
            }
            public double Sin()
            {
                return Math.Sin(_val);
            }
        }
        const int C1 = 100000000;
        static void Main(string[] args)
        {
           
          for(int i=0;i<C1;i++)
            {
                var x = Math.Sin(i);
            }
            Console.WriteLine(GC.CollectionCount(0));
            Console.WriteLine(GC.GetTotalMemory(false));

            for(int i=0;i<C1;i++)
            {
                var y = new MyMath(i);
                var x = y.Sin();
            }
            Console.WriteLine(GC.CollectionCount(0));
            Console.WriteLine(GC.GetTotalMemory(false));

            Console.ReadLine();

        }
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812545
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВПримерно это.
Тебе, по-моему, бесполезно объяснять, что объекты подобных классов никто не станет создавать каждый раз, а сделают синглтоном.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812734
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С инициализацией статиков есть еще одна интересная засада, я как-то сейчас даже забыл про неё упомянуть. Что будет, если инициализация кинет ексепшен?

А будет вот что
CLR больше не будет предпринимать попытки снова инициализировать этот статический класс, заставить его это сделать тоже никак нельзя, т.ч. класс так и будет висеть неинициализированным до завершения приложения.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812793
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
А ты попробуй.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    class C
        {
            static C()
            {
                var x = 0;
                var d = 7 / x;
            }
        }
      
        static void Main(string[] args)
        {

            C c = new C();
            Console.ReadLine();

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

Я сейчас вместо этого попробовал вот так:

Код: 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.
    public static class Foo
    {
        static Foo()
        {
            Console.WriteLine("Entering constructor.");
            var x = 0;
            var y = 42 / x;
            Z = 69;
        }

        public static int Z { get; }
    }

    internal class Program
    {
        private static void Main(string[] args)
        {
            for (var i = 0; i < 6; i++)
            {
                try
                {
                    Console.WriteLine(Foo.Z);
                }
                catch
                {
                    Console.WriteLine("Exception thrown.");
                }
            }
        }
    }



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Entering constructor.
Exception thrown: System.TypeInitializationException
Exception thrown: System.TypeInitializationException
Exception thrown: System.TypeInitializationException
Exception thrown: System.TypeInitializationException
Exception thrown: System.TypeInitializationException
Exception thrown: System.TypeInitializationException

Поведение оказалось даже более забавное, чем я ожидал. Похоже, что после того как один ексепшен выкидывается из конструктора, обращение к какому-то статическому методу или свойству автоматом кидает TypeInitializationException, даже не пытаясь снова этот конструктор выполнить.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813004
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Поведение оказалось даже более забавное, чем я ожидал. Похоже, что после того как один ексепшен выкидывается из конструктора, обращение к какому-то статическому методу или свойству автоматом кидает TypeInitializationException, даже не пытаясь снова этот конструктор выполнить.
Нормальное поведение. Если тип не инициализован, использовать его нельзя.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813016
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
Console.WriteLine("Exception thrown.");


Exception thrown: System.TypeInitializationException

Код и результаты выполнения не совпадают :D

кстати, если в блоке catch {} (без указания типа исключения) остановить отладчик, то можно посмотреть значение исключения через "переменную" $exception в QuickWatch (Shift+F9), но только в режиме отладки
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813020
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВfkthatПоведение оказалось даже более забавное, чем я ожидал. Похоже, что после того как один ексепшен выкидывается из конструктора, обращение к какому-то статическому методу или свойству автоматом кидает TypeInitializationException, даже не пытаясь снова этот конструктор выполнить.
Нормальное поведение. Если тип не инициализован, использовать его нельзя.скажу больше. Не рекомендуют райзе в конструкторе во многих ЯП, а не только в шарпе).
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813023
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВНормальное поведение. Если тип не инициализован, использовать его нельзя.

Это естественно, засада в том, что его после первой неудачи никак уже нельзя попытаться инициализировать повторно. Например, Lazy<T> имеет специальный параметр в конструкторе, который как раз позволяет то или иное поведение при неуспешной инициализации выбрать.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813042
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat Например, Lazy<T> имеет специальный параметр в конструкторе, который как раз позволяет то или иное поведение при неуспешной инициализации выбрать.
Удивительное рядом. Это какой такой параметр?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813049
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВfkthat Например, Lazy<T> имеет специальный параметр в конструкторе, который как раз позволяет то или иное поведение при неуспешной инициализации выбрать.
Удивительное рядом. Это какой такой параметр?
Функционал Lazy к данному топику вообще притянут за уши.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813055
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВfkthat Например, Lazy<T> имеет специальный параметр в конструкторе, который как раз позволяет то или иное поведение при неуспешной инициализации выбрать.
Удивительное рядом. Это какой такой параметр?
LazyThreadSafetyMode

- If the mode is LazyThreadSafetyMode.ExecutionAndPublication or LazyThreadSafetyMode.None , there is no second chance to initialize the Lazy<T> instance .
If an exception occurs and is unhandled in the initialization function, that exception is cached and rethrown on subsequent accesses of the Lazy<T>.Value property.
No value is created if an exception is thrown, so in such cases IsValueCreated returns false.

- If the mode is LazyThreadSafetyMode.PublicationOnly , the first thread that succeeds in running the initialization function (or the default constructor) creates the value for the Lazy<T> instance.
If the initialization function throws an exception on one thread, other threads can still try to initialize the Lazy<T> instance .
Until the value is created, the IsValueCreated property returns false.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813098
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЭто какой такой параметр?
Сложно самому в референс заглянуть?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813099
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesКод и результаты выполнения не совпадают :D


Да, я просто там добавил

Код: c#
1.
....WriteLine("Exception {0}", e.GetType());



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


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