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();
}