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

Сообщение Re: Инициализатор объектов от 01.12.2020 16:49

Изменено 01.12.2020 16:52 alexzzzz

Re: Инициализатор объектов
Здравствуйте, _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", а не как-то по-другому, это роли не играет. Локальные переменные вообще штуки эфемерные.

Если финальная переменная не локальная, а какое-нибудь доступное извне поле
    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 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;
    }