コードが現在のスコープから外れると、既存のオブジェクトに対して何かを実行するラッパーを作成する必要があります。
コードは次のようになります。
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#は参照を使用していると思いました...
ありがとう。
更新しました