C军

不玩博客了!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  496 随笔 :: 0 文章 :: 634 评论 :: 571万 阅读

一、引入类型与值类型简介

  值类型:直接存放于栈中,取的时候是直接取得值。值类型继承自System.ValueType(自定义对象)

  引用类型:存在于托管堆中,取的时候是从栈取该对象的地址,然后用这个地址去托管堆中取值。引用类型继承自System.Object。(int,bool,struct)

二、在代码编写上的区别

  在赋值的时候,值类型是复制一份,新的和旧的在以后的操作中互不影响,而引用类型复制的只是地址,在以后的修改中,修改新的旧的也会受到影响。

  代码示例:

复制代码
    static void Main(string[] args)
    {
        List<Person> ListPerson = new List<Person>();
        ListPerson.Add(new Person(){ Name="刘备" });
        ListPerson.Add(new Person(){ Name="关羽" });

        List<Person> ListPerson2 = ListPerson.Where(m => m.Name == "刘备").ToList();
        ListPerson2[0].Name = "曹操";

        foreach(Person p in ListPerson)
        {
            Console.WriteLine(p.Name);  //输出曹操  关羽  (对于刚开始Name="刘备的Person",只存在一份,怎么改,改的都是那个)
        }

        List<int> ListInt = new List<int>();
        ListInt.Add(1);
        ListInt.Add(2);

        List<int> ListInt2 = ListInt.Where(m => m > 1).ToList();
        ListInt2[0] = 5;

        foreach (int i in ListInt)
        {
            Console.WriteLine(i);  //输出1 2 值类型,改变了ListInt2[0]的那个值,就只是改变了那个值,对原有List没影响
        }

        Console.ReadKey();
    }
复制代码

   示例2:

复制代码
        static void Main(string[] args)
        {
            int i = 1;
            geti(i);

            Console.WriteLine(i);   //输出 1

            Person p = new Person() { Name = "" };
            getP(p);

            Console.WriteLine(p.Name);  //输出 琴琴

            Console.ReadKey();
        }

        public static void getP(Person p)
        {
            p.Name = p.Name + p.Name;
        }

        public static void geti(int i)
        {
            i = i + i;
        }
复制代码

  引用类型由于调用参数时传递的是地址,所以对这个地址的修改会影响到原有对象。如果希望值类型与引用类型一样也有影响,那么就只有用ref传参了。俗称,引用传递。

 

posted on   逆心  阅读(1869)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2013-05-08 Open Flash Chart 之线图
点击右上角即可分享
微信分享提示