我有一個修改對象的委託。我將一個對象從調用方法傳遞給委託,但調用方法不會選擇這些更改。如果我將List
作爲對象,則相同的代碼有效。在C#中通過引用傳遞對象和對象列表#
我認爲所有的對象都通過引用傳遞,所以任何修改都會反映在調用方法中。那是對的嗎?
我可以修改我的代碼,將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);
我意識到你試圖隱藏原來的名字,但是你必須清理它。 'CallingMethod'內的'MyBinder'沒有定義,'MyObjectBinder'沒有被使用......它們是相同的嗎?我只能嘗試假設,並且我不想那麼做... – Randolpho 2010-06-14 19:22:11