2013-06-26 4 views
8

Я вижу this:Что ImmutableArray в C#

Этих пакеты предоставляет коллекцию, которые являются потокобезопасными и гарантировано никогда не изменять их содержимое, также известное как неизменные коллекции.

Но я не понимаю, что именно и когда мы должны использовать ImmutableArray?

+1

Неизменяемые средства неизменяемые FYI – FabianCook

+4

Вы следили за ссылками от Nuget [здесь] (http://blogs.msdn.com/b/bclteam/archive/2012/12/18/preview-of-immutable-collections- выпущен-на-nuget.aspx)? –

+0

Таким образом, это касается некоторых случаев использования в «Почему я должен использовать неизменность?». раздел. Какое дополнительное «когда» вам нужно? –

ответ

6

неизменен массив будет readonly объекта, в отличии от что-то вроде ExpandoObject

Это означает, что значения не могут быть изменены после определения (если вы не определите его снова)

Например:

ImmutableByteArray byteArray = new ImmutableByteArray(new byte[] { 0, 1, 2, 3 }); 

Всегда будет иметь значения, заданные изменяемым массивом new byte[] { 0, 1, 2, 3 }, если он не будет определен снова.

+0

'readonly' является модификатором C# для деклараций полей, поэтому смущает использовать этот термин в отношении неизменяемых объектов в .NET. Это отдельные концепции. –

+0

Да, должно быть, действительно использовалась другая формулировка. – FabianCook

7

Неизменный объект может быть определен как объект, состояние которого не может быть изменен после того, как created.The наиболее широко используется неизменная объект, безусловно, Струнные object.Immutable объекты полезны, когда безопасность потока вызывает беспокойство и/или когда экземпляр объекта должен быть доступен за пределами вашего кода в режиме только для чтения.
Преимущества:

  • Потокобезопасность
  • Это безопасно передать ссылку неизменяемой объекта за пределами класса без риска того, что данные могут быть изменены

Недостатки :

  • памяти использования

Как использовать:

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 поддерживает перечисление. Так использовать как ..

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 так же, как ! Equals().

 Смежные вопросы

  • Нет связанных вопросов^_^