C#值类型和引用类型、赋值、区别、相同点

C#值类型和引用类型

前言:在C#中变量分为以下几种类型:值类型(Value Types),引用类型(Reference Types),指针类型(Pointer Types);指针类型(变量存储另一种类型变量的地址)与C++中的使用方式一致,主要分析值类型和引用类型。

1.值类型:

(1)所有的值类型都隐式派生自System.Value.Type,包括整型(byte,int),浮点型(float,double,decimal),布尔型(bool),字符型(char),结构体(Struct),枚举类型(enum),可空类型。
(2)值类型的变量,直接存储数据,数据存放在栈中(Stack)。
(3)值类型的变量声明后,不管是否已经赋值,编译器为其分配内存。
(4)所有的值类型都是Seal类(密封类),无法派生出新的类型。

2.引用类型:

(1)所有的引用类型直接派生于System.Object,包括字符串(String),数据(Array),类(Class),接口(Interface),委托(delegate),基类型(Object)。
(2)引用类型的变量持有的是数据的引用(可以理解为指针,地址),存放在栈(Stack)中,数据存放在堆(Heap)中。
(3)引用类型声明后,只在栈中分配一小片内存用于容纳一个地址,而此时没有在堆上分配内存空间。
(4)当使用new创建一个引用类型的实例时,分配堆上的内存空间,并把堆上空间的地址保存到栈上分配的小片空间中。
在这里插入图片描述

3.值类型和引用类型的区别和相同点

相同点:(1)都可以实现接口(结构体也可以实现接口);

区别:(1)引用类型可以派生出新的类型,而值类型不可以

(2)引用类型可以包含null值,而值类型不能

4.值类型变量和引用类型变量的赋值

(1)将值类型的变量赋值给另一个变量,会执行一次赋值,复制的是栈中的数据。
(2)将引用类型的变量赋值给另一个引用类型变量,复制的是引用类型变量存储在栈中的内存地址,在赋值后就会多个变量指向同一个引用对象实例。
在这里插入图片描述
代码示例:

			Console.WriteLine("#####################下面是值类型和引用类型赋值测试代码#####################");
            //值类型赋值
            int a = 5;//不赋值,默认值是0
            int b = a;
            Console.WriteLine($"默认值: a={a},b={b}");
            a = 10;
            Console.WriteLine($"修改a的值后: a={a},b={b}");
            b = 20;
            Console.WriteLine($"修改b的值后: a={a},b={b}");

            //创建了一个学生类,同时包含姓名字段
            //引用类型赋值
            Student stu1 = new Student();
            stu1.Age = 18;
            Student stu2 = stu1;
            Console.WriteLine($"默认值: stu1.Age={ stu1.Age}, stu2.Age={stu2.Age}");
            stu1.Age = 28;
            Console.WriteLine($"修改stu1.age的值后:stu1.Age={ stu1.Age}, stu2.Age={stu2.Age}");
            stu2.Age = 38;
            Console.WriteLine($"修改stu2.age的值后: stu1.Age={ stu1.Age}, stu2.Age={stu2.Age}");

            Console.ReadKey();

运行结果:
在这里插入图片描述

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值