C# 不可变引用类型 和 可变引用类型

📅 2026/7/29 0:00:13 👁️ 阅读次数 📝 编程学习
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");}}
}

 

日新闻