更新Readonly int数组?

时间:2013-06-19 08:54:14

标签: c# .net readonly readonly-collection

在经典意义上,只能在constrcutor中设置Readonly对象,以后不能修改。为什么readonly int数组的行为有所不同。

PS:我知道Readonly收藏品,我很想知道为什么允许这样做?

class Class1
{
    public readonly int[] a;

    public Class1()
    {
        a = new int[3];
        a[0] = 1;
        a[1] = 2;
        a[2] = 3;
    }

    public void Update()
    {
        a[0] = 10;
    }
}

3 个答案:

答案 0 :(得分:4)

Readonly修饰符应用于分配给的实际类型。因此,在这种情况下,它分配给一个Array类型实例,但不分配给它内部的元素

这就是为什么,是的,您仍然可以更改元素值,但代码如

public void Update()
{
   a[0] = new int[3];
}

将失败,因为您要更改阵列类型实例(而不是其内容)

希望这有帮助。

答案 1 :(得分:3)

readonly使数组不可变,而不是数组项。 readonly表示您可以仅在内联或构造函数中将数组分配给a字段。但它不会阻止任何人更改每个数组项的内容。

答案 2 :(得分:0)

如果您将此数组内容设为只读,请执行此操作

public readonly int[] a;
ReadOnlyCollection<int> result = Array.AsReadOnly(a);
public Class1()
{
    a = new int[3];
    a[0] = 1;
    a[1] = 2;
    a[2] = 3;

}

public void Update()
{
    result[0] = 10; // Compile Time Error Here
}