Сообщение Re: Константы. Класс или структура? от 29.05.2024 14:09
Изменено 29.05.2024 14:09 VladD2
Re: Константы. Класс или структура?
Здравствуйте, Разраб, Вы писали:
Р>Эти конструкции эквивалентны или нет?
Да, если речь идет о доступе к константе. В данном случае и класс, и структура выступают в роли пространства имен для структуры, а в код (где используется константа) подставляется её значение (т.е. сама константа инлайнится).
Нет, если речь идет о переменной данного типа. Класс будет размещен в хипе, а структура в стеке (или в хипе при боксинге). Но константа тогда тут не причем.
Маразм Шарпа в том, что в нем нельзя объявить константу вне типа и тип используется в качестве пространства имен. По уму можно было допустить объявление:
Но тогда CLR пришлось бы расширять первоклассной сущностью — константой. На этом решили сэкономить допустив только типы.
По той же причине сделали маразм с отсутствием глобальных функций (не методов).
Р>Эти конструкции эквивалентны или нет?
Да, если речь идет о доступе к константе. В данном случае и класс, и структура выступают в роли пространства имен для структуры, а в код (где используется константа) подставляется её значение (т.е. сама константа инлайнится).
Нет, если речь идет о переменной данного типа. Класс будет размещен в хипе, а структура в стеке (или в хипе при боксинге). Но константа тогда тут не причем.
Маразм Шарпа в том, что в нем нельзя объявить константу вне типа и тип используется в качестве пространства имен. По уму можно было допустить объявление:
namespace X
{
public const int Zero = 0;
}
Но тогда CLR пришлось бы расширять первоклассной сущностью — константой. На этом решили сэкономить допустив только типы.
По той же причине сделали маразм с отсутствием глобальных функций (не методов).
Re: Константы. Класс или структура?
Здравствуйте, Разраб, Вы писали:
Р>Эти конструкции эквивалентны или нет?
Эквивалентны, если речь идет о доступе к константе. В данном случае и класс, и структура выступают в роли пространства имен для структуры, а в код (где используется константа) подставляется её значение (т.е. сама константа инлайнится).
Неэквивалентны, если речь идет о переменной данного типа. Класс будет размещен в хипе, а структура в стеке (или в хипе при боксинге). Но константа тогда тут не причем.
Маразм Шарпа в том, что в нем нельзя объявить константу вне типа и тип используется в качестве пространства имен. По уму можно было допустить объявление:
Но тогда CLR пришлось бы расширять первоклассной сущностью — константой. На этом решили сэкономить допустив только типы.
По той же причине сделали маразм с отсутствием глобальных функций (не методов).
Р>Эти конструкции эквивалентны или нет?
Эквивалентны, если речь идет о доступе к константе. В данном случае и класс, и структура выступают в роли пространства имен для структуры, а в код (где используется константа) подставляется её значение (т.е. сама константа инлайнится).
Неэквивалентны, если речь идет о переменной данного типа. Класс будет размещен в хипе, а структура в стеке (или в хипе при боксинге). Но константа тогда тут не причем.
Маразм Шарпа в том, что в нем нельзя объявить константу вне типа и тип используется в качестве пространства имен. По уму можно было допустить объявление:
namespace X
{
public const int Zero = 0;
}
Но тогда CLR пришлось бы расширять первоклассной сущностью — константой. На этом решили сэкономить допустив только типы.
По той же причине сделали маразм с отсутствием глобальных функций (не методов).