C# 值类型和引用类型讲解
2022/7/31 1:30:19
本文主要是介绍C# 值类型和引用类型讲解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
要了解值类型和引用类型,我们首先要知道堆和栈的区别:
① 栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小
②存放在栈中时要管存储顺序,保持着先进后出的原则,它是一片连续的内存域,由系统自动分配和维护。
而堆是无序的,它是一片不连续的内存域由有用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收。
C#的值类型包括:结构体,枚举,可空类型,byte,short,int,long,float,double,decimal,char,bool ;值类型是存储在数据栈上的;
C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串,引用类型存储在堆上。
了解了以上区别后,我们通过实例来展示下使用的区别:
引用类型举例:下面定义两个byte数组,交换下下标一致的数据:
代码如下:
`static void Main(string[] args) { byte[] a = new byte[] { 1, 2, 3, 4, 5 }; byte[] b = new byte[] { 6, 7, 8, 9, 10 }; ChangeData(a, b); Console.Write($"a数组的值:"); for (int i=0;i< a.Count();i++) { Console.Write($"{a[i]} "); } Console.WriteLine("\n ***********"); Console.Write($"b数组的值:"); for (int i = 0; i < b.Count(); i++) { Console.Write($"{b[i]} "); } Console.ReadKey(); } private static void ChangeData(byte[] aaa, byte[] bbb) { int tempa = aaa.Count(); int tempb = bbb.Count(); int count = tempa > tempb ? tempb : tempa; byte temp = 0; for (int i = 0; i < count; i++) { temp = aaa[i]; aaa[i] = bbb[i]; bbb[i] = temp; } }`
虽然我们把byte数组传递给了方法ChangeData去处理了,但是处理完a,b的数据实现了交换,因为数组是引用类型,
所以上例中aaa和a都是指向的同一段地址,所以一个aaa改变后,a数组的值对应的有改变了。
值类型举例:
` static void Main(string[] args) { //byte[] a = new byte[] { 1, 2, 3, 4, 5 }; //byte[] b = new byte[] { 6, 7, 8, 9, 10 }; //ChangeData(a, b); //Console.Write($"a数组的值:"); //for (int i=0;i< a.Count();i++) //{ // Console.Write($"{a[i]} "); //} //Console.WriteLine("\n ***********"); //Console.Write($"b数组的值:"); //for (int i = 0; i < b.Count(); i++) //{ // Console.Write($"{b[i]} "); //} int a = 5; int b = 8; ChangeValue(a,b); Console.WriteLine($"a的值:{a}"); Console.WriteLine($"b的值:{b}"); Console.ReadKey(); } //private static void ChangeData(byte[] aaa, byte[] bbb) //{ // int tempa = aaa.Count(); // int tempb = bbb.Count(); // int count = tempa > tempb ? tempb : tempa; // byte temp = 0; // for (int i = 0; i < count; i++) // { // temp = aaa[i]; // aaa[i] = bbb[i]; // bbb[i] = temp; // } //} private static void ChangeValue(int aaa, int bbb) { int temp = aaa; aaa = bbb; bbb = temp; } `
我们看值交换后aaa和bbb值变化了,原始的a和b的值并没有变化。
这篇关于C# 值类型和引用类型讲解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID
- 2024-01-23用CI/CD工具Vela部署Elasticsearch + C# 如何使用
- 2024-01-23.NET开源的简单、快速、强大的前后端分离后台权限管理系统