我需要编写一个包装器,当代码超出当前范围时,对现有对象执行某些操作。
代码如下所示:
public class ObjWrapper : IDisposable
{
private KnownType dt = null;
public ObjWrapper(KnownType data)
{
this.dt = data;
}
public void Dispose()
{
SaveKnownTypeInDB(this.dt);
}
}
调用看起来像这样:
KnownType data = new KnownType();
// do something on `data`
using (ObjWrapper ow = new ObjWrapper(data))
{
// do something on `data`
}
我总是从对象的原始状态获取数据库中的值。当我在 Dispose() 中放置断点时,我可以确认它具有原始值。当我在堆栈上检查调用者方法时,我在构造函数中传递的对象具有正确的值。我期待该data
对象是通过引用传递的,并且内部调用的所有属性ObjWrapper
都具有“更新”值。我还尝试ref
在构造函数中传递数据,或者将数据作为属性放在ObjWrapper
构造函数之后并将其设置,但都是一样的。知道为什么吗?我认为对于这种对象,c# 正在使用引用......
谢谢。
更新