Passando objetos e uma lista de objetos por referência em C #

Eu tenho um delegado que modifica um objeto. Eu passo um objeto ao delegado a partir de um método de chamada, no entanto, o método de chamada não capta essas alterações. O mesmo código funciona se eu passar umList como o objeto

Eu pensei que todos os objetos fossem passados por referência, para que quaisquer modificações fossem refletidas no método de chamada. Isso está correto?

Eu posso modificar meu código para passar umref objeto ao delegado. Mas estou me perguntando por que isso é necessário. Ou é?

public class Binder
{
    protected delegate int MyBinder<T>(object reader, T myObject);

    public void BindIt<T>(object reader, T myObject)
    {
        //m_binders is a hashtable of binder objects
        MyBinder<T> binder = m_binders["test"] as MyBinder<T>;
        int i = binder(reader, myObject);
    }
}

public class MyObjectBinder
{
    public MyObjectBinder()
    {
        m_delegates["test"] = new MyBinder<MyObject>(BindMyObject);
    }

    private int BindMyObject(object reader, MyObject obj)
    {
        obj = new MyObject
        {
            //update properties
        };
        return 1;
    }
}

///calling method in some other class
public void CallingMethod()
{
    MyObject obj = new MyObject();

    MyObjectBinder binder = new MyObjectBinder();
    binder.BindIt(myReader, obj); //don't worry about myReader

    //obj should show reflected changes
}

Atualizar:

Agora estou passando objetos porref para o delegado enquanto estou instanciando um novo objeto dentroBindMyObject.

protected delegate int MyBinder<T>(object reader, ref T myObject);

questionAnswers(1)

yourAnswerToTheQuestion