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 appelante n'a pas de ramassage de ces changements. Le même code fonctionne si je passe une Liste 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?
Je peux modifier mon code pour passer d'un objet référence au délégué mais je me demande pourquoi est-ce nécessaire?
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
J'ai passé des objets par la réf pour le délégué comme je l'ai été de l'instanciation d'un objet à l'intérieur de BindMyObject.
protected delegate int MyBinder<T>(object reader, ref T myObject);