Les objets de passage et une liste des objets par référence en C#

J'ai un délégué qui modifie un objet. Je passe d'un objet à la délégation à partir d'un appel de méthode, mais la méthode d'appel ne permet pas de détecter ces changements. Le même code fonctionne si je passe un List que l'objet.

Je pensais que tous les objets sont passés par référence, donc toutes les modifications seront reflétées dans l'appel de la méthode. Est-ce exact?

Je peux modifier mon code pour passer un ref objet du délégué. Mais je me demande pourquoi cela est nécessaire. Ou est-il?

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
}

Mise à jour:

Je suis en train de passer les objets par ref au délégué que je suis de l'instanciation d'un objet à l'intérieur de BindMyObject.

protected delegate int MyBinder<T>(object reader, ref T myObject);
  • Je me rends compte que vous essayez de masquer les noms d'origine, ici, mais vous avez à nettoyer cette. MyBinder à l'intérieur de CallingMethod n'est pas défini, MyObjectBinder n'est pas utilisé... sont-ils les mêmes? Je peux seulement essayer de prendre, et je ne veux pas le faire...
InformationsquelleAutor David | 2010-06-14