Важно отметить, что передача по ссылке в C # имеет особое значение. В случае свойства свойство в конечном итоге указывает на тот же адрес, что и адрес объекта, для которого оно было установлено. В случае передачи объектов в функцию, C # использует передачу ссылки по семантике значения. Это означает, что сама ссылка копируется, поэтому новый указатель указывает на тот же адрес, что и переданный объект. Это препятствует тому, чтобы функция обнуляла любой оригинальный указатель, устанавливая ее параметры в нуль. Чтобы фактически передать исходную ссылку, необходимо использовать ключевое слово 'ref':
class SomeClass
{
public object MyObjectProperty { get; set; }
}
var someClass = new SomeClass();
object someObject = new object();
someClass.MyObjectProperty = someObject; // Makes MyObjectProperty point to the same location as someObject
В следующем случае используется ссылка по семантике значения:
void MyMethod(object someObject)
{
someObject = null;
}
object someObject = new object();
MyMethod(someObject);
Console.WriteLine(someObject == null); // Prints false
В следующем случае используется фактическая передача по ссылочной семантике:
void MyMethod(ref object someObject)
{
someObject = null;
}
object someObject = new object();
MyMethod(ref someObject);
Console.WriteLine(someObject == null); // Prints true