私は疑問に思っています: db4o データベースからオブジェクトをロードする場合、フィールド初期化子は常に呼び出されますか?
スレッドセーフのため、オブジェクトのロックに使用される一時的なフィールド syncRoot が例として挙げられます。
public class Test
{
[Transient]
private object syncRoot = new object();
[Transient]
private object syncRoot2;
public Test()
{
this.syncRoot2 = new object();
}
}
db4o クエリは次のようになります。
Test mytestObject = (from Test test in session
select test).First();
syncRoot2
db4oクエリ中にオブジェクトコンストラクターが呼び出されないため、値がnullになるため、使用できません。しかし、どうsyncRoot
ですか?db4o モデル オブジェクトでフィールド初期化子を使用しても安全ですか?