Почему я не могу изменить результат конвертации в ящик?

struct Point
{
    public int x;
    public int y;
}
void Main()
{
    Point p;
    p.x = 1;
    p.y = 1;
    Object o = p;
    ((Point) o).x = 4; // error
    ((Point) o).x = 5; // error
    ((Point) o).x = 6; // error
    p = (Point) o  // expect 6
}

Почему нетт компилировать в

ldloc.1 // o
unbox Point
ldc.i4.4
stfld Point.x

Где C ++ CLI позволяет это.

Для тех, кто нене знаю,unbox являетсяне требуется создать копиютипы значенийвместо этого он помещает указатель на значение в стек. Только назначение создаст копию.

Ответы на вопрос(2)

Ваш ответ на вопрос