Ответ 1
Объекты не передаются по ссылке. Объекты не передаются вообще.
По умолчанию значение аргумента передается по значению - независимо от того, является ли это значением типа значения или ссылкой. Если объект изменен с помощью этой ссылки, это изменение также будет видимым для вызывающего кода.
В коде, который вы показали изначально, не было причин использовать ref
. Ключевое слово ref
используется, когда вы хотите, чтобы метод, изменяющий значение параметра (например, чтобы он ссылался на другой объект целиком) и имел это изменение видимым для вызывающего.
Теперь, в коде, который вы показали (изначально), вы получили:
private int BindMyObject(object reader, MyObject obj)
{
//make changes to obj in here
}
Вы имеете в виду код вроде этого:
private int BindMyObject(object reader, MyObject obj)
{
obj = new MyObject();
}
или код следующим образом:
private int BindMyObject(object reader, MyObject obj)
{
obj.SomeProperty = differentValue;
}
? Если это последнее, вам не нужно ref
. Если это первое, тогда вам нужно ref
, потому что вы меняете сам параметр, не изменяя объект, на который ссылается значение. Фактически, если вы просто устанавливаете значение obj
, не читая его, вы должны использовать out
вместо ref
.
Если вы можете показать короткую, но полную программу, которая демонстрирует вашу проблему, будет намного проще объяснить, что происходит.
Трудно сделать эту тему справедливой только в нескольких параграфах - так что у меня есть вся статья об этом, которая, мы надеемся, сделает вещи более очевидны.