Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10 .. 12   вперед  Ctrl      все
 Инициализация статического класса  [new]
iskatelsql
Member

Откуда:
Сообщений: 783
Есть статический класс, к примеру

    static class asd
    {
        public static int m;

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

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

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

А в статическом классе можно сделать как-то так, чтоб компилятор ругался "нефиг вызывать методы этого класса, не проинициализировав переменную", если перед вызовом любого метода не присвоить ей значение?
1 май 19, 05:32    [21876116]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1143
1) Статики - зло;
2) Мембер класса всегда инициализируется автоматически значением по умолчанию.
3) Public fields - зло. Замени на свойство и поставь проверку что было присвоение.
4) Освой общепринятый стиль именования для C#

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;
    }
}
1 май 19, 07:59    [21876127]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
iskatelsql
public static int m = 3.14;

?
1 май 19, 08:37    [21876132]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat
Public fields - зло
глобальные константы же.
1 май 19, 08:39    [21876135]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
iskatelsql
если перед вызовом любого метода не присвоить ей значение?
если инициализация перед вызовом метода, то помести ее параметром в метод. И все тебя поймут сразу.
1 май 19, 08:41    [21876137]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
iskatelsql,
Либо откажись от статического. Г.. код будет.
1 май 19, 08:44    [21876138]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Petro123
iskatelsql
public static int m = 3.14;

?

Не. Как я понял, он хочет проверять, чтобы статик был явно инициализирован из внешнего кода перед тем как его вызывают.
1 май 19, 09:03    [21876148]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26479
iskatelsql
А в статическом классе можно сделать как-то так, чтоб компилятор ругался "нефиг вызывать методы этого класса, не проинициализировав переменную", если перед вызовом любого метода не присвоить ей значение?

Любопытно узнать реальную задачу, а не вот это :)
1 май 19, 09:13    [21876153]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat,
"Перед вызовом" это уход от статического в обычный класс. Об этом я и написал.
У него нет логики в постановке.
1 май 19, 09:17    [21876156]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
В с++ нет статических классов, но есть макросы.
В шарпе нет макросов, но есть статические классы.
И оба мучаются))))
1 май 19, 09:44    [21876169]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Dima T
Member

Откуда:
Сообщений: 13673
Petro123
В с++ нет статических классов, но есть макросы.

В обычных классах есть static методы и static переменные.
1 май 19, 09:51    [21876173]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Dima T,
Есть обходные пути) . Но я про классы.
1 май 19, 10:16    [21876183]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Petro123
В с++ нет статических классов, но есть макросы.
В шарпе нет макросов, но есть статические классы.
И оба мучаются))))

Вот и я ж говорю - хочется что-то расшарить между кодом - делайте просто синглетон, тем более, если есть DI контейнер, то он вам сам его сделает, и делать ничего не надо
сontainerBuilder.RegisterType<MySingleton>().As<IMySingleton>().SingleInstance();
1 май 19, 12:04    [21876223]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat
делайте просто синглетон
много букв которые не написать по памяти.
Global.param = "глобальная константа";
Короче и запоминать не надо.
1 май 19, 12:07    [21876225]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat,
Какой DI в десктопе.
1 май 19, 12:08    [21876228]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
Petro123
Какой DI в десктопе.
а что мешает?
1 май 19, 12:09    [21876230]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Shocker.Pro
Petro123
Какой DI в десктопе.
а что мешает?
израт делать?
Хороший вкус мешает.
1 май 19, 12:10    [21876232]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Кто тут еще не юзал static class)))
1 май 19, 12:12    [21876234]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 1712
Shocker.Pro
Petro123
Какой DI в десктопе.
а что мешает?

Лень ему мешает разобраться в том, что такое dependency injection.
1 май 19, 12:16    [21876236]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
Дмитрий Мух
Лень ему мешает разобраться в том, что такое dependency injection.
не, он вроде знает, только не понимает, что контейнер необязательно может быть из коробки ))
1 май 19, 12:19    [21876237]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 1712
Shocker.Pro
Дмитрий Мух
Лень ему мешает разобраться в том, что такое dependency injection.
не, он вроде знает, только не понимает, что контейнер необязательно может быть из коробки ))

для этого даже не надо книжку покупать, или скачивать

Картинка с другого сайта.

достаточно прям на странице содержание пролистать
1 май 19, 12:25    [21876242]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Shocker.Pro,
вам все потрындеть вместо ответа на простой вопрос.
Если программист, то приходилось ли вам использовать глобальные переменные или статик классы?
1 май 19, 12:26    [21876243]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
А писатели про DI вместо темы про static class идите лесом в другую тему.
1 май 19, 12:27    [21876245]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Petro123
fkthat,
Какой DI в десктопе.

Чо? У меня все консольные утилиты и те с DI пишутся.
1 май 19, 12:27    [21876247]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat
Petro123
fkthat,
Какой DI в десктопе.

Чо? У меня все консольные утилиты и те с DI пишутся.

А у меня в квартире Газ!
1 май 19, 12:28    [21876248]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10 .. 12   вперед  Ctrl      все
Все форумы / WinForms, .Net Framework Ответить