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变量影响,各司其职。。。

C#值类型、引用类型(1)

 

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

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

C#值类型、引用类型(1)

 

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

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

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

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

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

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

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

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

例如:

int a=(int) obj;

这时就被拆掉了。

 

C#值类型、引用类型(1)

上一篇:Swagger注解-@ApiModel 和 @ApiModelProperty


下一篇:ASP.NET Core3.1使用IdentityServer4中间件系列随笔(二):创建API项目,配置IdentityServer保护API资源