У меня есть делегат, который изменяет объект. Я передаю объект делегату из вызывающего метода, однако вызывающий метод не набирает эти изменения. Тот же код работает, если я передаю List как объект. Я думал, что все объекты переданы по ссылке, поэтому любые изменения будут отражены в вызывающем методе?
Я могу изменить свой код, чтобы передать объект ref делегату, но мне интересно, почему это необходимо?
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
}
ОБНОВЛЕНО
Я передал объекты по ref делегату, поскольку я создавал новый объект внутри BindMyObject.
protected delegate int MyBinder<T>(object reader, ref T myObject);
