zoukankan      html  css  js  c++  java
  • C#值类型、引用类型(1)

    值类型:byte short/char int long float double decimal bool enum

    特点:在进行赋值的时候传的是数值,修改其中任意一个数据变量时,另一个不会受到影响。

    例如:

    int a=12;
    int b=a;
    b++;
    Console.WrithLine("${a} {b}");
    //a=12,b=13

    引用类型:string object array

    特点:在赋值过程中,传递的是地址

    int[] arr={1,2,3,4,5};
    int[] arr2=arr;
    arr[0]=22;
    Console.WriteLine("${arr[0]} {arr2[0]}");
    //输出 arr[0]=22,arr[2]=22

    值类型:可以这么理解:A,B变量分别是两个不同的空间。给定A变量赋值为 2 ,给定B变量也赋值为 2。现在,修改A变量值为 3,B变量不会发生改变,也就是说B变量开辟的空间不受A变量影响,各司其职。。。

     引用类型:拿数组举例,A为数组开辟了一个空间,1,2,3分别是数组元素。

    这时候B指向数组A,不管是数组还是对象,都需要通过关键字new再去开辟另一个空间,但是,这里B指向了数组A,此时当数组A里面的元素发生改变时,B必然也会发生改变,因为此时B并没有单独开辟空间,它还是指向了数组A。。。

    万物都有它的源头。。。在程序中也适用。。。也就是里氏替换原则。

    里氏替换原则:父类型变量可以装子类型的对象。

    那就是 Object,可以说是他们的“祖宗”

    object obj=1;//整型
    obj="abc";//字符串
    obj=new int[]{1,2,3};//数组

    以上操作可以称为封装操作。

    封装操作:把值类型转换成引用类型,装箱操作。虽然这个包箱是引用类型,但是箱子里面的值依然是值类型。但是一旦进行了装箱操作,就无法直接使用里面的值。

    打个比方理解:比如说出去买啤酒,但是这瓶啤酒外面包了一层箱子,显然是无法直接喝的。需要把这个箱子拆开,把里面的酒拿出来。也就是说我们需要进行拆箱操作。

    拆箱操作:把引用类型装换为值类型,拆箱操作。实际上在装箱时底层调用了一个inbox方法,拆箱时,调用unbox方法。

    例如:

    int a=(int) obj;

    这时就被拆掉了。

  • 相关阅读:
    AC 自动机
    [HihoCoder-1424] Asa's Chess Problem
    C++ Tricks
    2017"百度之星"程序设计大赛
    后缀自动机
    ASP教程:gb2312和utf-8乱码问题解决
    cryto-js 常用加密库 md5加密
    nrm是什么?以及nrm的安装与命令
    MongoDB 安装
    koa2 安装与启动
  • 原文地址:https://www.cnblogs.com/hcyesdo/p/12774417.html
Copyright © 2011-2022 走看看