Readonly и коллекции - C#
Формулировка задачи:
Мне стыдно обращаться с таким вопросом, и еще более стыдно что он у меня возник. Поясните мне смысл модификатора видимости readonly. Ибо для коллекций я не могу понять его смысла. Поясню на примере.
Одним словом - readonly коллекции неизменяемыми не делает.
1) Почему? Какие либо мысли на эту тему. К примеру может я не правильно понял смысл данного модификатора видимости.
2) Как их сделать константными?
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 и коллекции»
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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д