c#【值类型和引用类型】--乌云后依然是灿烂的晴天

本文深入探讨了C#中值类型和引用类型的关键区别,包括它们的存储位置、赋值行为、性能差异及如何影响代码设计。通过结构体和类的例子,解释了这些类型在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本数据类型

在这里插入图片描述

值类型和引用类型的区别

1.值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
2.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
3. 值类型存取速度较快,引用类型存取速度较慢。
4. 值类型从System.ValueType类派生,引用类型从System.Object派生,,但是结构也可以实现接口
5.值类型不可能包含 null 值,必须有一个明确的值,引用类型被赋值前的值都是null
6.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

结构体和类为例

结构体
1.在结构中默认的也有一个无参数的构造函数
2.当在结构中写一个有参数的构造函数,默认的无参数的构造函数还有,没有被干掉
3.结构中写构造函数要把所有的字段都要完全赋值
输出的是20男;100女

			Person p1 = new Person();
            p1.Age = 20;
            p1.Gender = '男';

            Person p2 = new Person();
            p2 = p1;
            p2.Age = 100;
            p2.Gender = '女';
            Console.WriteLine(p1.Age);
            Console.WriteLine(p1.Gender);
          
            Console.WriteLine(p2.Age);
            Console.WriteLine(p2.Gender);
            Console.ReadKey();

在这里插入图片描述

1.值类型的值存在栈上,引用类型 栈上存的是地址,值在堆上
2.类当中默认的有一个无参数的构造函数
3.当在类中写一个有参数的构造函数,默认无参数的构造函数就被干掉
4.类中写构造函数参数列表中参数个数可以不确定
输出的是100女
在这里插入图片描述

堆和栈的区别

值类型在栈中操作,引用类型则在堆中分配存储单元。栈在编译的时候就分配好内存空间,在代码中有栈的明确定义;
堆是在程序运行中动态分配的内存空间,可以根据程序的运行情况动态的分配内存的大小。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值