关于C#中readonly的变量赋值问题。

来源:互联网 发布:三维接线软件 编辑:程序博客网 时间:2024/06/06 20:31

最近看到了readonly和const的区别,发现了一个自己的知识盲区,就是关于readonly的赋值问题。我的理解是对于readonly的一个变量,如果是值类型的,那么是这个变量的写操作是受限制的,如果是一个引用类型,那么保存的是这个变量的内存地址,对这个引用的写操作是受限制的,但是对于这个变量里面的成员的读写操作是不受限制的。具体可以看下面的一个例子。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApp1{    class Program    {        public Program()        {            _testList.Add(123);        }        private  readonly List<int> _testList = new List<int>();        static void Main(string[] args)        {            Program pro = new Program();            pro.Test();            Console.ReadKey();        }        private  void Test()        {            Console.Write(_testList.Count+“  ”);            _testList.Add(1);            Console.Write(_testList.Count);        }    }}

输出:1  2

可以看到这时候对_testList的添加操作是不受限制的,因为是改变了_testList里面的成员,而对于_testList里面保存的内存地址并没有改变,所以是可以添加的。

如果把 _testList.Add(1); 修改为  _testList = new List<int>;就会有报错,报错为:无法对只读的变量赋值(构造函数或变量初始值指定项中除外)。

原创粉丝点击