深入C#数据类型
2020-12-13 14:18
标签:style blog http 使用 sp 数据 on 2014 问题 技能掌握目标: 1.理解结构 2.理解装箱和拆箱 3.理解值类型和引用类型的概念 4.理解值类型和引用类型作为方法参数的区别 5.会使用值类型和引用类型作为方法参数解决问题 值类型和引用类型: 1.值类型和引用值类型 值类型源于System.ValueType家族,每个值类型的对象都有一个独立的内存区域用于保存自己的值,值类型数据所在的内存区域成为栈(Stack)。只要在代码中修改它,就会在它的内存区域内保存这个值。值类型包括基本数据类型(如 int float double)、枚举类型和结构类型 引用值类型源于System.Object家族,在C#中引用值类型主要包括数组、类和接口等。 接下来是一个小的Example: 题目:已知小明和小红去年的身高是170cm,而今年小明长高了50cm,小红没有变 但是如果我用数组的话结果就是另说了~ 它的运行结果就是: 哎?为什么我的赋值没有错误,但是为什么会两个的值都变了呢? 那是因为引用类型和值类型的原因,引用类型和值类型的内存变化不一样,所以导致了两种结果的变化,接下来我为大家介绍一下引用类型和值类型在内存中的变化 我们先讲值类型 首先系统为变量I分配了一段储存空间,如图: 然后程序将I的值赋给了J系统为变量J分配了一段储存空间,如图: 最后 J 的值变成180,此时变量J对应的存储空间将发生变化: 接下来我们讲引用值类型的内存运作,在讲引用值类型的时候我们用到了堆和栈,在这之后我会给大家单独开一个博客在解释堆和栈。 我们用的引用值类型是数组我们来跟着代码看着草图来理解: Int[] nameMingAge = { 19 }; int[] nameHongAge = nameMingAge; Console.WriteLine("去年小红的年龄是:{0}\t小明的年龄是:{1}", nameHongAge[0], nameMingAge[0]); nameHongAge[0] = 20; Console.WriteLine("今年小红的年龄是:{0}\t小明的年龄是:{1}", nameHongAge[0], nameMingAge[0]); Console.ReadLine(); 引用值类型和值类型的数据类型分类图: 值传递和引用值传递的参数(ref) 值传递不带参数ref的方法和调用: 它的运行结果是: 加上值传递的参数 ref后的方法和调用: 它的运行结果是: 注意点: 引用传递:只要参数前有ref关键字修饰,统统称为引用传递 结论:如果是值传递(没有ref关键字),并且参数类型为值类型,那么结果不变 如果是值传递(没有ref关键字),参数是引用类型,结果永久改变!@ 如果是引用传递(ref),无论参数是值类型还是引用类型,结果都会永久改变!! ---------------------------------------------------------------------------------------------------------------------- 接下来我们讲一讲结构吧: 结构体 .不能为结构体中变量赋初值 .结构体中可以有方法,字段,属性 结构体是值类型,而类是引用类型 对结构体中的属性赋值的时候,可以不new出对象,直接通过变量名.属性赋值 在什么场景下使用结构体? 如果当前的抽象类型中属性量比较少的时候,我们可以考虑使用结构体 接下来让我们看看如何使用结构: 首先写介绍一下他的语法 访问修饰符 struct 结构名 { //结构体:也就是方法和属性。 } 接下来让我们以图片的方式来给大家展示定义结构的过程 01.首先创建一个类叫做Student 02.把关键字class改成struct并且前面加上public访问修饰符 03.在Main方法中进行调用 结构体我们就讲到这里,接下来我给大家讲讲装箱和拆箱: 我们先做的就是装箱操作 如图: 它的运行结果是: 上面的图讲述的是装箱的方法,接下来讲一下拆箱的方法: 它的运行结果是: 对于装箱和拆箱的操作,本人认为能不要用最好就不要用,因为每次装箱和拆箱都会损耗一定的程序性能。而且当代码运行到公共语言规范(CLS)的时候系统会自动给弄些需要的变量进行装箱和拆箱操作,所以对于装箱和拆箱的内容我就一带而过了,这是本人的第三个博客,如果大家认为还可以的话记得关注哦~~~~ 深入C#数据类型 标签:style blog http 使用 sp 数据 on 2014 问题 原文地址:http://www.cnblogs.com/fengyepiaoluo/p/4060956.html