在经典意义上,只能在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;
}
}
答案 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
}