c#只读字段值可以在控制台主要方法中更改

问题描述 投票:-1回答:2
class Program
{
    private readonly static int[] dict = new int[9]{1,2,3,4,5,6,7,8,9};
    static void Main(string[] args)
    {
        var arr1 = dict;
        arr1[2] = 10;
        var arr2 = dict;
    }
}

执行上面的代码,arr1 [2],arr2 [2]和dict [2]全部= 10,dict [2]和arr2 [2]是否仍为3?

c# console-application
2个回答
0
投票

只读]并不意味着您不能修改实例,而仅是您不能重新分配实例。因此,您可以这样做:

arr[0] = ...

但不是这个:

arr = new int[1];

数组只是对象。您当然可以对对象执行任何操作,即使它是readonly

readonly MyClass m;
static void Main()
{
    m.MyProperty = 33;
}

0
投票
  • C#中的readonly表示“此字段只能在构造函数中分配”。
  • 它确实不是表示字段的值是不可变的。认为它等同于Java的final修饰符。
  • 虽然C ++和Swift具有对不可变值的内置支持,但C#没有(在C ++中,这是const关键字)。
  • 在C#和.NET中,拥有不可变值的唯一方法是使用trust是不可变的类型-或仅通过IReadOnly...接口公开对象(尽管这仍然不能保证值是不可变的。
© www.soinside.com 2019 - 2024. All rights reserved.