• C#如何更好地理解引用类型和值类型


    说道值类型和引用类型,在C#中,官方的说法就是:

    值类型直接指向数据;一般包括C#自带的所有数字类型,字符类型,bool类型,当然还有自定义的结构类型和枚举类型

    而引用类型则是指向数据存储的地址。一般指所有类,数组,代理和接口类型。请注意还包括字符类型

    值类型与引用类型的根本区别就是它们在内存中处理的方式:

    值类型的内容仅仅就是对类型的值;为一个值类型实例赋值总是赋值这个值的实例。比如 int a=1; int b=a;那么为b赋值的时候,就是把a的值复制一份,在内存中心创建一块区域保存b的值。a和b的存储是独立的。

    而引用类型比值类型复杂,引用类型包括两部分:对象和指向对象的引用。引用类型变量是指向包含值的对象的引用。比如class a=new class(); class b=a;那么为b赋值的时候,仅仅把a的引用地址复制给b。这样a和b就指向内存中的同一个地址。a和b是关联的。

    下面我们来举一个例,来说明值类型和引用类型在内存中的差别:

    public class Staff
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Salary { get; set; }
    }
    
    public struct Employee
    {
        public string FirstName{get;set;}
         public string LastName { get; set; }
        public int Salary { get; set; }
    }
    
    ...
    private static void Demo()
    {
    
        Staff s1 = new Staff { FirstName = "123" };
        Staff s2 = s1;
        s2.FirstName = "abc";
    
        Employee e1 = new Employee { FirstName = "123" };
        Employee e2 = e1;
        e2.FirstName = "abc";
    
        Console.WriteLine("s1="+s1.FirstName+", e1=" + e1.FirstName)
    }
    Difference between val and ref type

    输出结果为:s1=abc, e1=123
    注意s1为引用类型,e1为结构类型(值类型)

  • 相关阅读:
    小结:ES7——async和await初识
    如何抽离、引用公共部分页面
    数据处理:高德、百度经纬度坐标的相互转化
    mock数据的基础使用
    express随笔
    ES6学习基础
    初学node.js
    ajax基础
    ajax的几个面试题
    (转)认识原型对象和原型链
  • 原文地址:https://www.cnblogs.com/yang_sy/p/3555360.html
Copyright © 2020-2023  润新知