Информация об изменениях

Сообщение Re: Константы. Класс или структура? от 29.05.2024 14:09

Изменено 29.05.2024 14:09 VladD2

Re: Константы. Класс или структура?
Здравствуйте, Разраб, Вы писали:

Р>Эти конструкции эквивалентны или нет?


Да, если речь идет о доступе к константе. В данном случае и класс, и структура выступают в роли пространства имен для структуры, а в код (где используется константа) подставляется её значение (т.е. сама константа инлайнится).

Нет, если речь идет о переменной данного типа. Класс будет размещен в хипе, а структура в стеке (или в хипе при боксинге). Но константа тогда тут не причем.

Маразм Шарпа в том, что в нем нельзя объявить константу вне типа и тип используется в качестве пространства имен. По уму можно было допустить объявление:
namespace X
{
  public const int Zero = 0;
}


Но тогда CLR пришлось бы расширять первоклассной сущностью — константой. На этом решили сэкономить допустив только типы.

По той же причине сделали маразм с отсутствием глобальных функций (не методов).
Re: Константы. Класс или структура?
Здравствуйте, Разраб, Вы писали:

Р>Эти конструкции эквивалентны или нет?


Эквивалентны, если речь идет о доступе к константе. В данном случае и класс, и структура выступают в роли пространства имен для структуры, а в код (где используется константа) подставляется её значение (т.е. сама константа инлайнится).

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

Маразм Шарпа в том, что в нем нельзя объявить константу вне типа и тип используется в качестве пространства имен. По уму можно было допустить объявление:
namespace X
{
  public const int Zero = 0;
}


Но тогда CLR пришлось бы расширять первоклассной сущностью — константой. На этом решили сэкономить допустив только типы.

По той же причине сделали маразм с отсутствием глобальных функций (не методов).