2
我設計了一個類,其中包含有關將在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'的setter被標記爲'private'。至於解決'註冊'問題的方法,即使這樣我也不能保證用戶不寫'Instance1.Register(); Instance1.Register()'。他們都會返回一個新的對象,但由於我保留了原始引用,所以我可以多次執行這些方法。 – User
@用戶:是的,我只是注意到了這一點,並編輯了我的答案。進一步編輯... –