Поддерживает ли .NET IL копирование по ссылке или по значению? - PullRequest
0 голосов
/ 14 января 2012

Единственный язык .NET, который я знаю, это C #. В C # вы можете написать lhs=rhs и, если это структура, он будет копировать по значению, если класс копируется по ссылке.

.NET CLI поддерживает работу с любым типом объектов? Могу ли я создать struct Pt { int x, y; } и сделать что-то вроде

Pt pt
var pt_ref=&pt
pt_ref.x=99 //pt.x is now 99
var pt_cpy=pt
pt_cpy.x=88 //nothing else has changed

1 Ответ

3 голосов
/ 14 января 2012

На уровне IL возможны ссылки на типы значений. C # запрещает их (кроме параметров, использующих ключевое слово ref), но в C ++ / CLI вы можете написать свой пример:

value struct Pt
{
    int x;
    int y;
};

void f()
{
    Pt pt;
    Pt% ptRef = pt;
    ptRef.x = 99;
    Pt ptCpy = pt;
    ptCpy.x = 88;
}

Однако, обратный путь невозможен. Если у вас есть ссылочный тип, и вы создаете его копию, вы создаете копию самой ссылки, а не ссылочного объекта. Если вы хотите скопировать ссылочный объект, вам нужно написать функцию, чтобы скопировать его самостоятельно.

...