Ich habe einen Delegaten, der ein Objekt ändert. Ich übergebe ein Objekt an den Delegaten von einer aufrufenden Methode, jedoch nimmt die aufrufende Methode diese Änderungen nicht auf. Der gleiche Code funktioniert, wenn ich ein List
als das Objekt übergebe.Übergeben von Objekten und einer Liste von Objekten durch Verweis in C#
Ich dachte, dass alle Objekte als Referenz übergeben wurden, so dass alle Änderungen in der aufrufenden Methode widergespiegelt werden würden. Ist das korrekt?
Ich kann meinen Code ändern, um ein ref
Objekt an den Delegaten zu übergeben. Aber ich frage mich, warum das notwendig ist. Oder ist es?
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
}
Update:
ich jetzt Objekte von ref
an den Delegaten vorbei als ich ein neues Objekt in BindMyObject
bin Instanziierung.
protected delegate int MyBinder<T>(object reader, ref T myObject);
Ich realisiere, dass Sie versuchen, die ursprünglichen Namen hier zu verstecken, aber Sie müssen das aufräumen. 'MyBinder' in' CallingMethod' ist nicht definiert, 'MyObjectBinder' wird nicht verwendet ... sind sie gleich? Ich kann nur versuchen, anzunehmen, und ich will das nicht tun ... – Randolpho