0

在经典意义上,只读对象只能在构造函数中设置,以后不能修改。为什么 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;
    }
}
4

3 回答 3

4

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

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

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

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

希望这可以帮助。

于 2013-06-19T09:00:51.317 回答
3

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

于 2013-06-19T08:59:15.353 回答
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
}
于 2013-06-19T09:00:01.940 回答