位奇數一個如此...鎖定對象,以防止任何數據改變
可以說我有以下類:
public class Wibble
{
public string Foo {get;set;}
public string Bar {get;set;}
}
此類用於一種工藝,其中的Foo的值和酒吧更新/更改。但是,在過程中的某個點之後,我想「鎖定」實例以防止發生任何更改。所以問題是如何最好地做到這一點?
了各種各樣的解決辦法是這樣的:
public class Wibble
{
private string _foo;
private string _bar;
public bool Locked {get; set;}
public string Foo
{
get
{
return this._foo
}
set
{
if (this.Locked)
{
throw new ObjectIsLockedException()
}
this._foo = value;
}
}
public string Bar
{
get
{
return this._bar
}
set
{
if (this.Locked)
{
throw new ObjectIsLockedException()
}
this._bar = value;
}
}
}
然而,這似乎有點不雅。
想要做到這一點的原因是我有一個應用程序框架,使用外部開發的插件使用類。 Wibble類被傳遞給插件,但其中一些不應該改變內容,其中一些可以。這背後的意圖是捕捉開發集成問題而不是運行時生產問題。讓對象「鎖定」允許快速識別未按指定編碼的插件。
這讓我想起Eric Lippert所說的「冰棒不變性」。請參閱:http://blogs.msdn.com/b/ericlippert/archive/2011/05/23/read-only-and-threadsafe-are-different.aspx和http://blogs.msdn.com/b/ ericlippert/archive/2007/11/13/immutability-in-c-part-one-of-immutability.aspx – 2011-05-26 13:40:15
我問了一個類似的問題,Lippert先生提供了一個很好的描述,對於。我還發布了一個我最終使用的例子。 http://stackoverflow.com/questions/4168382/immutable-views-of-mutable-types – 2011-05-26 14:59:10