C# 是否更新只读int数组?
在经典意义上,只读对象只能在构造函数中设置,以后不能修改。为什么只读int数组的行为会有所不同 PS:我知道只读收藏,我只是想知道为什么允许这样做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
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数组不是一成不变的,只是只读的,这意味着它可以被赋值一次,除非有反射之类的魔术。另一方面,它的内容可以改变。。。