C# 是否更新只读int数组?

C# 是否更新只读int数组?,c#,.net,readonly,readonly-collection,C#,.net,Readonly,Readonly Collection,在经典意义上,只读对象只能在构造函数中设置,以后不能修改。为什么只读int数组的行为会有所不同 PS:我知道只读收藏,我只是想知道为什么允许这样做 class Class1 { public readonly int[] a; public Class1() { a = new int[3]; a[0] = 1; a[1] = 2; a[2] = 3; } public void Upda

在经典意义上,只读对象只能在构造函数中设置,以后不能修改。为什么只读int数组的行为会有所不同

PS:我知道只读收藏,我只是想知道为什么允许这样做

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

readonly使数组不可变,而不是数组项。只读意味着您可以将数组内联或仅在构造函数中分配给字段。但这并不阻止任何人更改每个数组项的内容。

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

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
}

只读修饰符应用于指定给它的实际类型。因此,在本例中,它被分配给一个数组类型实例,但不分配给其中的元素

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

public void Update()
{
   a[0] = new int[3];
}
将失败,因为您将更改数组类型实例而不是其内容

希望这有帮助。

怎么样?int数组不是一成不变的,只是只读的,这意味着它可以被赋值一次,除非有反射之类的魔术。另一方面,它的内容可以改变。。。