【发布时间】:2011-03-03 16:21:15
【问题描述】:
我有一个修改对象的委托。我从调用方法将对象传递给委托,但是调用方法不会获取这些更改。如果我将 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);
【问题讨论】:
-
我知道你在这里试图隐藏原来的名字,但你必须把它清理干净。
MyBinder内部CallingMethod未定义,MyObjectBinder未使用...它们相同吗?我只能尝试假设,我不想那样做......
标签: c# pass-by-reference