Re: Инициализатор объектов
От: alexzzzz  
Дата: 01.12.20 16:49
Оценка:
Здравствуйте, _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;
    }
Отредактировано 01.12.2020 16:55 alexzzzz . Предыдущая версия . Еще …
Отредактировано 01.12.2020 16:54 alexzzzz . Предыдущая версия .
Отредактировано 01.12.2020 16:53 alexzzzz . Предыдущая версия .
Отредактировано 01.12.2020 16:52 alexzzzz . Предыдущая версия .
Отредактировано 01.12.2020 16:50 alexzzzz . Предыдущая версия .
Отредактировано 01.12.2020 16:49 alexzzzz . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.