Нет. В c # вы можете применить семантику передачи по ссылке, используя модификаторы ref
или out
:
void Foo( ref string s, ref int x )
{
s = "Hello World"; // caller sees the change to s
x = 100; // caller sees the change to x
}
// or, alternatively...
void Bar( out string s )
{
s = "Hello World";
}
Разница между этими двумя заключается в том, что при out
вызывающему не требуется указывать значение при вызове метода, поскольку требуется, чтобы вызываемый метод присвоил значение до выхода.
В C # «указатели» - это то, что вы можете использовать только в небезопасном коде . Как и в C или C ++, указатели в C # позволяют ссылаться на расположение переменной или объекта. Ссылки в C # отличаются - вы не должны думать о них как о указателях - они предназначены для того, чтобы быть более непрозрачными и предоставлять способ «ссылаться» на переменную или объект, не обязательно подразумевая, что они указывают на его местоположение в памяти. *
Со ссылками вы можете использовать специальные ключевые слова (out
, ref
) для передачи псевдонима переменной. Они доступны только в контексте вызовов методов - где компилятор может использовать информацию о времени жизни ссылок, чтобы убедиться, что ссылка не переживает исходную переменную с псевдонимом.