Здравствуйте, _NN_, Вы писали:
_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", а не "temp" или как-то по-другому, это роли не играет. Локальные переменные вообще штуки эфемерные. Могут существовать или не существовать независимо от того, что ты наобъявлял в своём коде; их имена ни на что не влияют и через рефлексию недоступны.
Если финальная переменная не локальная, а какое-нибудь доступное извне поле
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;
}