一:值类型和引用类型
1.值类型:
值类型源于System.Value家族,每个值类型的对象都有一个独立的内存区域用于保存自己的值,值类型
所在的内存区域称之为栈(Stack),只要在代码中修改它,就会在内存区域保存这个值。
(对于值类型,不同的变量会分配不同的存储空间,并且在存储空间中存储的是该变量的值。赋值操作
传递的是变量的值,改变一个变量的值不会影响另一个变量的值)
2.引用类型:
引用类型源于System.Object家族,在C#中引用类型主要包括数组,类和接口等。
如图:
问题:有一个小程序,以知张浩和李明去年的身高都是170,体重为60,而今年李明张到了180和70,现在要输出俩
人的身高体重。
a.错误的思维方式及代码:
运行结果
我们发现张浩和李明的身高体重都发生了变化不符合要求
b.正确的思路及代码:
运行结果
图解原理
二:结构
1.语法:
访问修饰符 struct 结构名
{
//结构体
}
2.结构定义有以下特点
a.结构中可以有字段也可以有方法
b.定义时,结构的字段不能被赋值
3.结构的调用注意事项
a.在某些特定情况下可以不用new,直接定义结构对象即可(尽可能的去new)
b.声明结构对象后,必须给结构体的成员赋初值
结构的使用经验
结构是值类型,声明结构变量就存储一个结构的新副本,即系统要开辟一块新的存储空间,因此结构用得越多所消耗的空间也越多
三:装箱和拆箱
1.所谓装箱即是将值类型转换为引用类型,反之称作为拆箱
示例代码:
装箱:
拆箱:
2.注意事项:我们这里讲解装箱拆箱主要是让大家了解它的概念,但其实在实际开发之中我们应该减少装箱与
拆箱的使用,因为二者的存储方式不同,转换的时候性能损失较大。
四:不同类型的参数传递
1.值传递和引用传递
有没有ref,有ref的为引用传递,没有的为值传递
2.ref字母能改变什么
值传递:1 值类型(不会改变) 2 引用类型(会改变)
引用传递:3 ref 值类型(会改变)4 ref 引用类型(会改变)