C# 不可变引用类型 和 可变引用类型
一、基本概念
引用类型的实例对象存储在托管堆上,变量保存的是对象的引用。
不可变引用类型:
对象状态:创建后不可修改
修改操作:创建新对象
线程安全:天然安全(无需锁)
内存开销:修改时产生新对象
可变引用类型:
对象状态:创建后可修改
修改操作:修改原对象
线程安全:需要同步机制
内存开销:修改无额外对象
二、常见类型
可变引用类型:
List, Dictionary, class, HashSet, Queue, LinkedList
不可变引用类型(Immutable):
string
元组
委托(Action, Func, Delegate)
ImmutableStack, ImmutableQueue, ImmutableList, ImmutableDictionary
三、不可变引用类型的特性
不可变引用类型赋值后就不受原变量影响
using System; namespace Test { public class Test { private Action testAction1; private Action testAction2; private void TestAction() { testAction1 += FunA; // 创建新对象 testAction2 = testAction1; testAction1 += FunB; // 创建新对象 // 这个时候curAction和testAction指向的对象不再是同一个了 // 测试 Console.WriteLine("执行testAction1"); testAction1.Invoke(); Console.WriteLine("执行testAction1"); testAction2.Invoke(); // 不可变引用类型赋值后就不受原变量影响 } private void FunA() { Console.WriteLine("执行方法A"); } private void FunB() { Console.WriteLine("执行方法B"); } } }

浙公网安备 33010602011771号