поля класса при компиляции удалялись?
Тип, он же и так заменяет везде ссылки на это поле на его значение, зачем мне скомпилинное поле ещё?
А чем тебе мешает наличие .field public static literal ? Оно не занимает память итд. По сути это чисто для рефлексии метаданные. Вот даже нашёл пруф I.8.6.1.2 Location signatures https://www.ecma-international.org/wp-content/uploads/ECMA-335_6th_edition_june_2012.pdf краткий ответ Нет. Так как это есть в спеке.
Просто любопытно было Но спасибо за хороший ответ
Они удалятся и вместо них адрес подставится. С чего ты решил что при компиляции они остаются?)
Класс остаётся, для рефлексий и подобного Я это проверил сначала, а выше мне и ссылку на стандарт кинули, где описывается это
Класс останется без константы
Будет передаваться как адрес, но поле все равно останется
Где? using System; public class C { public const string Test = "test"; public void M() { Console.WriteLine(Test); } } ; Core CLR v5.0.321.7212 on x86 C..ctor() L0000: ret C.M() L0000: mov ecx, [0xf52ecf4] L0006: call System.Console.WriteLine(System.String) L000b: ret
можно, напиши свой weaver для fody, который удаляет все константы
В IL есть. В асме вероятне его не будет, ведь нет нужды компилить этот класс
Ну да, как вариант Если совсем уж запариться
Ну вот. Значит проблемы нет. И беспокоиться не надо
Остаются, чтобы можно было их использовать в референсах.
Обсуждают сегодня