Сообщение Re: Инициализатор объектов от 01.12.2020 16:49
Изменено 01.12.2020 16:52 alexzzzz
Re: Инициализатор объектов
Здравствуйте, _NN_, Вы писали:
_NN>
_NN>Однако при компиляции в релиз это не так.
При компиляции всё то же самое, просто отсутствует последняя строка: a q = tempq, потому что нафиг не нужна. А что временная локальная переменная, с которой происходят операции, называется "q", а не как-то по-другому, это роли не играет. Локальные переменные вообще штуки эфемерные.
Если финальная переменная не локальная, а какое-нибудь доступное извне поле
то после компиляции получается ожидаемо
_NN>
_NN> a tempq = new a(1);
_NN> tempq.x = 1;
_NN> tempq.y = 2;
_NN> a q = tempq;
_NN>
_NN>Однако при компиляции в релиз это не так.
При компиляции всё то же самое, просто отсутствует последняя строка: a q = tempq, потому что нафиг не нужна. А что временная локальная переменная, с которой происходят операции, называется "q", а не как-то по-другому, это роли не играет. Локальные переменные вообще штуки эфемерные.
Если финальная переменная не локальная, а какое-нибудь доступное извне поле
public static A a;
public void M()
{
a = new A(1)
{
x = 1,
y = 2,
};
}
то после компиляции получается ожидаемо
public static A a;
public void M()
{
A obj = new A(1);
obj.x = 1;
obj.y = 2;
a = obj;
}
Re: Инициализатор объектов
Здравствуйте, _NN_, Вы писали:
_NN>
_NN>Однако при компиляции в релиз это не так.
При компиляции всё то же самое, просто отсутствует последняя строка: a q = tempq, потому что нафиг не нужна. А что временная локальная переменная, с которой происходят операции, называется "q", а не как-то по-другому, это роли не играет. Локальные переменные вообще штуки эфемерные. Могут существовать или не существовать независимо от того, что ты объявил в своём коде.
Если финальная переменная не локальная, а какое-нибудь доступное извне поле
то после компиляции получается ожидаемо
_NN>
_NN> a tempq = new a(1);
_NN> tempq.x = 1;
_NN> tempq.y = 2;
_NN> a q = tempq;
_NN>
_NN>Однако при компиляции в релиз это не так.
При компиляции всё то же самое, просто отсутствует последняя строка: a q = tempq, потому что нафиг не нужна. А что временная локальная переменная, с которой происходят операции, называется "q", а не как-то по-другому, это роли не играет. Локальные переменные вообще штуки эфемерные. Могут существовать или не существовать независимо от того, что ты объявил в своём коде.
Если финальная переменная не локальная, а какое-нибудь доступное извне поле
public static A a;
public void M()
{
a = new A(1)
{
x = 1,
y = 2,
};
}
то после компиляции получается ожидаемо
public static A a;
public void M()
{
A obj = new A(1);
obj.x = 1;
obj.y = 2;
a = obj;
}