Объекты не передаются по ссылке. Объекты вообще не передаются.
По умолчанию значение аргумента передается по значению - является ли это значение значением типа значения или ссылкой. Если объект изменяется с помощью этой ссылки, то это изменение будет видно и для вызывающего кода.
В коде, который вы показали изначально, не было причин использовать 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
. Если это первое, то вам do нужно ref
, потому что вы изменяете сам параметр, а не вносите изменения в объект, к которому относится значение. Фактически, если вы просто устанавливаете значение obj
, даже не читая его, вы должны использовать out
вместо ref
.
Если вы сможете показать короткую, но завершенную программу, которая демонстрирует вашу проблему, вам будет намного легче объяснить, что происходит.
Трудно раскрыть эту тему в нескольких параграфах - поэтому у меня есть целая статья об этом , которая, надеюсь, сделает вещи более очевидными.