您的位置:首页 > 编程语言 > C#

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

2017-10-30 11:45 417 查看
最近看到了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>;就会有报错,报错为:无法对只读的变量赋值(构造函数或变量初始值指定项中除外)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# readonly