Readonly и коллекции - C#

Узнай цену своей работы

Формулировка задачи:

Мне стыдно обращаться с таким вопросом, и еще более стыдно что он у меня возник. Поясните мне смысл модификатора видимости readonly. Ибо для коллекций я не могу понять его смысла. Поясню на примере.
    public class ReadOnlyTest
    {
        private readonly int g;
        private readonly int[] gg;
        private readonly List<int> ggg;
 
        public ReadOnlyTest()
        {
            g = 5;
            gg = new int[] {5, 5, 5, 5, 5, 5, 5, 5, 5, 5};
            ggg = new List<int> {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5};
        }
 
        public void IntTest()
        {
            g=4;// ошибка будет лишь только тут
            gg[4] = 4; // тут и на следующей строки ошибок не будет
            ggg[4] = 4;
            ggg = new List<int>{6, 6, 6, 6, 6}; // тут ошибка будет
 
            // но вуаля - альтернатива, на пару строчек длиннее но результат тот же
            for (int i = 0; i < ggg.Count; i++)
            {
                ggg[i] = 6;
            }
 
             // Желаете убрать лишнее - без проблем
            ggg.RemoveAt(4);
            ggg.RemoveAt(5);
            ggg.RemoveAt(6);
           
        }
    }
Одним словом - readonly коллекции неизменяемыми не делает. 1) Почему? Какие либо мысли на эту тему. К примеру может я не правильно понял смысл данного модификатора видимости. 2) Как их сделать константными?
Еще вопрос по теме - а возможна ли вообще неизменяемая коллекция или для этого нужно использовать какой то специальный тип? Или к примеру нужно просто запрещать присваивание элементам коллекции?

Решение задачи: «Readonly и коллекции»

textual
Листинг программы
class Program
    {
        class test
        {
            private readonly System.Collections.ObjectModel.ReadOnlyCollection<int> a;
            public test()
            {
                a = new List<int>(){1,2,3,4}.AsReadOnly();
            }
 
            public void t()
            {
                //a = new List<int>().AsReadOnly(); //ошибка
                //a.Add(4); //а такого метода вообще нет.
            }
 
            public void show()
            {
                foreach (int i in a)
                    Console.Write(i + " ");
            }
        }
 
        static void Main(string[] args)
        {
            test t = new test();
            t.show();
 
            Console.Read();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы