Ниже приведен код без использования исправлений при работе с типом указателя:
class PointRef
{
public int x;
}
public unsafe static void UseAndPinPoint()
{
PointRef pt = new PointRef { x = 5 };
int* p = &pt.x;
... Use int* variable here!
Console.WriteLine("Point is: {0}", pt);
}
и мой учебник говорит, что он должен использовать фиксированное ключевое слово, в противном случае возможно, что небезопасный контекст пытается взаимодействовать с членом, который больше не доступен или был перемещен в кучу после прохождения развертки поколения.
Я не совсем понял, в примере. не означает, что pt всегда указывает на объект, на который имеется ссылка (если мы не переназначим pt для указания на другой объект PointRef как pt = new PointRef { x = 1 };
), поэтому объект не будет собираться мусором до тех пор, пока метод UseAndPinPoint () не завершится.