zoukankan      html  css  js  c++  java
  • 引用类型与值类型在编码上的区别

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

      值类型:直接存放于栈中,取的时候是直接取得值。值类型继承自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传参了。俗称,引用传递。

  • 相关阅读:
    SAP OPEN UI5 Step 8: Translatable Texts
    SAP OPEN UI5 Step7 JSON Model
    SAP OPEN UI5 Step6 Modules
    SAP OPEN UI5 Step5 Controllers
    SAP OPEN UI5 Step4 Xml View
    SAP OPEN UI5 Step3 Controls
    SAP OPEN UI5 Step2 Bootstrap
    SAP OPEN UI5 Step1 环境安装和hello world
    2021php最新composer的使用攻略
    Php使用gzdeflate和ZLIB_ENCODING_DEFLATE结果gzinflate报data error
  • 原文地址:https://www.cnblogs.com/kissdodog/p/3716659.html
Copyright © 2011-2022 走看看