答案 0 :(得分:6)
不可变对象可以定义为一个对象,其状态在创建后无法修改。最广泛使用的不可变对象当然是 String 对象。当线程安全是一个问题时,可用对象很有用和/或必须在只读模式下访问代码外的对象实例。
的优点:强>
<强>缺点:强>
使用方法:
using ImmutableByteArray = System.ImmutableArray<byte>;
using ImmutableCharArray = System.ImmutableArray<char>;
也可以从像...这样的可变数组创建不可变数组。
ImmutableByteArray array1 = new ImmutableByteArray(new byte[] { 0, 1, 2, 3 });
ImmutableCharArray string = new ImmutableCharArray("test".ToCharArray());
我们可以从另一个不可变数组创建不可变数组。
ImmutableByteArray array2 = new ImmutableByteArray(new byte[] { 0, 1, 2, 3 });
ImmutableByteArray array3 = array1 + array2;
在这种情况下, array3 不会消耗更多内存 ImmutableArray支持枚举。所以使用like ..
foreach (byte b in array1)
Console.Write(b + " ");
并且可以实施 ICloneable 界面..
array5 = array1.Clone();
ImmutableArray还会覆盖并实现 Equals()和'=='以及'!='运算符。
Console.WriteLine("array1 equals array2: {0}", (array1.Equals(array2)); //same as array1 == array2
到目前为止,如果 array1!= array2 与相同,您可以使用上面的代码行!等于()强>
答案 1 :(得分:5)
不可变数组将是readonly
对象,不像ExpandoObject
这意味着定义后不能更改值(除非再次定义)
例如:
ImmutableByteArray byteArray = new ImmutableByteArray(new byte[] { 0, 1, 2, 3 });
除非再次定义,否则将始终具有可变数组new byte[] { 0, 1, 2, 3 }
给出的值。
答案 2 :(得分:0)
我想向您解释不可变集合,但如果您在此处阅读更多详细信息,则会更好: http://blogs.msdn.com/b/bclteam/archive/2012/12/18/preview-of-immutable-collections-released-on-nuget.aspx