第二章 深入C#数据类型
复习-常用数据类型
一、值类型和引用类型的概念
值类型:1.不同的变量会分配不同的存储空间,存储空间中存储的是该变量的值 。(改变一个变量值不会影响另一个变量值)
引用类型:赋值是把原对象的引用传递给另一个引用两个引用指向同一块内存空间
二、结构
语法:
特点:①结构中可以有字段,也可以有方法。
②定义时,结构中的字段不能被赋初始值。
结构的使用:①可以不用new,直接定义结构的对象即可。
②声明结构的对象后,必须给结构的成员赋初始值。
示例:
public struct Student
{
public int id; //ID ⇨字段不能直接赋初值
public int age; //年龄
public void Show() ⇨<font color=red >成员方法</font>
{
Console.WriteLine("ID:{0}\n年龄:{1}",id,age);
}
结构的使用经验:当对象需要用较少的字段来表示时,可以选用结构。
结构是值类型,数据提取速度快。
但是频繁的赋值操作会占用较大空间, 在开发中多数情况下都定义为类!!!
三、装箱和拆箱
1.值类型和引用类型之间的转换
示例:
static void Main(string[] args)
{
int i = 123;
object o = i; // 装箱
int j = (int)o; //拆箱 ⇨与值类型的变量类型要一致
经验:在实际的开发中,应该尽量减少不必要的装箱和拆箱。因为二者的存储方式不同,转换时性能损失较大
四、不同类型的参数传递
复习-值传递和引用传递
使用值传递,在方法中对参数值的更改在调用后不能保留;使用 ref 方式传递,可以将对参数值的更改保留
1.值方式传递引用类型参数⇨参数在方法中被修改
示例:
//传递引用类型参数
SE zhang = new SE();
//…省略其他赋值
zhang.Popularity = 10;
Voter voter = new Voter();
voter.Vote(zhang); ⇨参数zhang在Vote()调用后发生了变化
MessageBox.Show(zhang.SayHi());
public void Vote(SE se) ⇨按引用传递
{
//人气值增加1
se.Popularity++;
}
2.值方式传递值类型参数⇨①结构:StructSE ②不会被修改
示例:
//传递值类型参数
StructSE structZhang = new StructSE(); //创建SE结构
//…省略其他赋值
structZhang.Popularity = 10;
Voter voter = new Voter();
voter.Vote(structZhang); ⇨两次的人气值相同,参数在程序中未发生变化
MessageBox.Show(structZhang.SayHi());
public void Vote(StructSE se) ⇨值传递
{
//人气值增加1
se.Popularity++;
}
3.引用方式传递
①:ref 引用方式传递引用类型参数:
public void Vote(ref SE se) ⇨调用Vote()前后人气值发生变化,保留对参数的修改
{
//人气值增加1
se.Popularity++;
}
②:ref 引用方式传递值类型参数:
public void Vote(ref StructSE se) ⇨调用Vote()前后人气值发生变化,保留对参数的修改
{
//人气值增加1
se.Popularity++;
}
4.不同类型参数传递
总结: