В чем разница между ссылкой на значение с помощью указателя и ключевого слова ref
У меня есть следующий код:
class Program
{
private unsafe static void SquarePtrParam(int* input)
{
*input *= *input;
}
private static void SquareRefParam(ref int input)
{
input *= input;
}
private unsafe static void Main()
{
int value = 10;
SquarePtrParam(&value);
Console.WriteLine(value);
int value2 = 10;
SquareRefParam(ref value2);
Console.WriteLine(value2);
//output 100, 100
Console.ReadKey();
}
}
в чем разница между передачей указателя и ключевого слова ref в качестве параметра в методе?
1 ответов
на ref
ключевое слово действует как указатель, но изолирован от изменения фактического местоположения объекта в памяти. Указатель-это определенное место в памяти. Для объектов, собранных из мусора, этот указатель может измениться, но не при использовании fixed
заявление, чтобы предотвратить его.
вы должны изменить это:
SquarePtrParam(&value);
для этого:
fixed (int* pValue = &value)
{
SquarePtrParam(pValue);
}
чтобы убедиться, что указатель продолжает указывать на int
данные ожидать.