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");
        }
    }
}

 

posted @ 2026-05-11 16:58  apssic  阅读(2)  评论(0)    收藏  举报