C# 引用类型的引用丢失问题

最近遇到一个问题:
我定义了一个引用类型的变量A=B,B的变更的时候,A不会变更,我需要重新让A等于B。
感觉和平常使用的引用变量不太一样,很少遇到我需要主动去更新的情况。
我以为引用会像魔法一样自动更新😄
先看代码:

using System;
using System.Collections.Generic;
namespace ReferenceType
{
    // 数据源
    public class StudentData
    {
        public int id;
        public string name;
    }

    public class StudentModel
    {
        private Dictionary<int, StudentData> m_studentDataDic = new();
        public void UpdateStudentData(StudentData studentData)
        {
            m_studentDataDic[studentData.id] = studentData;
        }

        public StudentData GetStudentData(int studentId)
        {
            return m_studentDataDic.GetValueOrDefault(studentId);
        }
    }
    
    public class Test
    {
        private StudentModel m_studentModel;
        private void InitData()
        {
            m_studentModel = new StudentModel();
            m_studentModel.UpdateStudentData(new StudentData()
            {
                id = 1,
                name = "Job"
            });
        }
        // 假设Run是程序执行入口
        public void Run()
        {
            InitData();
            var student01 = m_studentModel.GetStudentData(1);
            if (student01 == null)
            {
                Console.WriteLine("学生01数据为空");
                return;
            }
            Console.WriteLine($"学生01的名字是:{student01.name}");
            m_studentModel.UpdateStudentData(new StudentData()
            {
                id = 1,
                name = "Ming"
            });
            Console.WriteLine($"学生01的名字是:{student01.name}");
            Console.WriteLine($"学生01的名字是:{m_studentModel.GetStudentData(1)?.name}");
        }
    }
}

输出结果:

学生01的名字是:Job
学生01的名字是:Job
学生01的名字是:Ming
student01复制的是内存地址,
当执行UpdateStudentData,m_studentModel[1]数据会指向新的内存数据,
这个时候student0指向的还是旧的地址。
引用类型保证的是:
修改同一个对象的内部数据,所有引用都能看到变化
引用类型不保证:
变量/容器指向不同的对象后,原来的引用会自动跟随

posted @ 2026-06-03 18:54  apssic  阅读(3)  评论(0)    收藏  举报