一、基本概念
引用类型的实例对象存储在托管堆上,变量保存的是对象的引用。
不可变引用类型:
对象状态:创建后不可修改
修改操作:创建新对象
线程安全:天然安全(无需锁)
内存开销:修改时产生新对象
可变引用类型:
对象状态:创建后可修改
修改操作:修改原对象
线程安全:需要同步机制
内存开销:修改无额外对象
二、常见类型
可变引用类型:
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");}} }
