关于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>;就会有报错,报错为:无法对只读的变量赋值(构造函数或变量初始值指定项中除外)。
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语言中变量赋值问题
- iOS-关于页面跳转时全局变量赋值不到的问题
- C# ASP.net写WebService中类的成员变量什么时候创建,赋值的问题。
- c# winform 关于给静态全局变量赋值的问题
- 提交字符数长度在[1000,2000]即字符数长度在1000到2000之间的时候报:关于“ora-01483:DATE或NUMBER赋值变量的长度无效”的问题
- 关于全局变量赋值的问题
- 关于ajax回调无法给全局变量赋值的问题
- 关于c语言中变量赋值问题
- 关于为c++类中的变量赋值的问题
- 关于全局变量初始化与赋值问题的思考
- 关于"中文变量"与"VB与C#"混写的问题
- 关于C/C++中switch语句case中变量不能初始化赋值的问题
- c#静态变量赋值问题
- 关于C#静态变量初始化问题
- 关于struct 变量初始化和赋值的问题(vs 环境)
- 关于“ora-01483:DATE或NUMBER赋值变量的长度无效”的问题
- c# winform 关于给静态全局变量赋值的问题
- 关于final变量的赋值问题
- 关于C#中的变量的初始化问题浅谈