部分开发者会认为,readonly修饰的变量是不能修改的,在以后的开发中从不对readonly的变量进行修改,形成思维定势,这个观念是错误的。
首先要明确一点:更改!=重新分配(赋值)
对于值类型(如int),更改是等于重新分配(赋值),因为默认操作符只有=, 但于对于引用类型,就不一定了。
一、当某个字段是引用类型,且被标记为readonly时,不可改变的是引用,而引用的对象是可以被改变的
例如:对于集合类型,可以增加、移除、清空内容。
public interface IA { }
public class A1 : IA { }
public class A2 : IA { }
public static class AContainer
{
// 因为AContainer.Items不能被直接访问,所以就用AContainer.As来间接访问AContainer.Items
private static readonly Dictionary<string, IA> Items = new Dictionary<string, IA>(); // 字典是引用
public static Dictionary<string, IA> As { get { return Items; } }
}
然后在外部可以修改Items
class Program
{
static void Main()
{
Console.WriteLine(AContainer.As.Count);
AContainer.As.Add("A1", new A1());
Console.WriteLine(AContainer.As.