SQL Serverデータベースに登録される特定のオブジェクトに関する情報を含むクラスを設計しました。私はこのオブジェクトを(深く)不変にしたいと思っていますが、一度だけ登録されることを保証しなければなりません。このオブジェクトが次のパターンを実装する場合、それはまだ不変であると見なすことができますか?そのようなオブジェクトは不変であると見なすことができますか?
public class NewClass
{
private bool registered;
public string SomeProperty { get; private set; }
public NewClass Register()
{
if (registered)
{
throw new NotImplementedException(/*arguments*/);
}
/* Register on DB here... */
registered = true;
return new NewClass(somePropertyFromDB);
}
public NewClass(string someProperty)
{
registered = false;
SomePropery = someproperty;
}
}
私はブールフィールドregistered
以外のオブジェクトは不変であるが、それは実際にRegister
メソッドが実行される最初の時間に変更されますので、このフィールドは私にいくつかの疑問を残して...誰が教えてくださいできることを言うだろう私はどうすればこの問題を解決し、オブジェクトを不変にすることができますか?
あなたの答えはありがたいですが、 'SomeProperty'の設定者は' private'とマークされています。そして、 '登録された'問題の解決法に関しては、そういう意味でも、ユーザーが 'Instance1.Register();を書くことはできません。 Instance1.Register() 'どちらも新しいオブジェクトを返しますが、元の参照を保持しているので、メソッドを何度も実行できます。 – User
@ユーザー:はい、私はちょうどそれに気付き、私の答えを編集しました。さらに編集中... –