Лучший способ сделать элементы содержимого массива доступными, но неизменяемыми вне содержащего класса - PullRequest
0 голосов
/ 28 января 2012

Если у меня есть такой класс:

public class ArrayContainer
{
    public int[] Array { get; private set; }
    public int Value { get; private set; }
    public ArrayContainer()
    {
        Array = new int[] { 1, 2, 3, 4, 5 };
        Value = 10;
    }
}

Это гарантирует, что Value не сможет быть изменен вне класса ArrayContainer, но отдельные значения Array смогутбыть изменен.Какой самый простой способ обойти это, чтобы убедиться, что вы можете просматривать значения в Array, но не изменять их?

Ответы [ 4 ]

2 голосов
/ 28 января 2012

Вы можете представить его как коллекцию только для чтения, используя Array.AsReadOnly.

public ReadOnlyCollection<int> MyArray { get; private set; }

MyArray = Array.AsReadOnly(new int[] { 1, 2, 3, 4, 5 });
0 голосов
/ 28 января 2012

На самом деле, в библиотеке базовых классов есть оболочка только для чтения для коллекций.Это ReadOnlyCollection<T>.

http://msdn.microsoft.com/en-us/library/ms132474.aspx

Если я правильно помню, компилятор жалуется, если вы пытаетесь получить доступ к set аксессору.

0 голосов
/ 28 января 2012

Существует readonlycollection , которую вы можете создать и передать пользователям этого класса.

0 голосов
/ 28 января 2012

Я бы сказал, что лучше всего было бы определить собственный класс ImmutableArray, в котором реализован индексатор без установщика. Получатель делегировал бы индексатору вашего Array члена, который был бы передан как параметр конструктора. Сделайте Array приватным и предоставьте экземпляр вашего ImmutableArray класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...