readonly修饰的变量可以修改,只是不能重新分配

readonly修饰的变量并非完全不可修改,对于引用类型,它阻止的是引用的重新分配,但允许修改引用对象的内容。例如,对于集合类型的readonly变量,可以进行增加、移除和清空操作。虽然可以通过反射等手段真正改变值类型变量,但这并不推荐。理解这点有助于正确使用readonly关键字。
摘要由CSDN通过智能技术生成

部分开发者会认为,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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值