深入C#数据类型

1:值类型和引用类型
值类型:

1:值类型源于Systen.ValueType家族,每个值类型的对象的对象都有一个独立的内存区域用于保存自己的值,值类型数据所在的内存区域称为栈(Stack)。只要在代码中修改它,就会在他的内存区域内保存这个值。值类型主要包括基本数据类型(如 int,float,double)和枚举类型。
2:对于值类型,不同的变量会分配不同的储存空间,并且储存空间中存储的是该变量的值。赋值操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值。

引用类型
1:引用类型源于System.Object家族,在C#中引用类型主要包括数组,类和接口等。
2:对于引用类型,赋值是把原对象的引用,传递给另一个引用。对数组而言,当一个数组引用赋值给另一个数组引用后,这两个引用指向同一个数组,也就是指向同一块储存空间。
3:数组复制可以利用循环实现。对于两个数组arry1和arry2(arry2的长度不小于arry1的长度),将数组arry1中的元素的值复制到arry2中,可以采用如下形式:
for(int I = 0; i<arry1.Length; i++)
{
arry2[i] = arry1[i]; //将数组arry1中的元素的值复制到数组arry2中
}

结构
1:结构的定义
Public struct 结构名
{
结构体
}
2:结构定义有以下特点:
1:结构中可以有字段,也可以有方法
2:定义时,结构中的字段不能被赋值
3:结构属于值类型

3:结构的使用:结构的使用和类相似。在使用结构时,要注意以下几个方面
1:可以不用new,直接定义结构的对象即可。
2:声明结构的对象后,必须给结构的成员赋值。
3:结构的使用经验:结构是值类型,声明结构变量就储存一个结构的新副本,即系统要开辟一块新的储存空间,因此结构用的越多所消耗的储存空间也越多。因此当对象需要较少的字段来表示时,就可以选用结构来实现。

装箱和拆箱
1:将值类型转换为引用类型的过程称为“装箱”,反之称为“拆箱”。
装箱示例:
Static void Main (string[] args)
{
int i = 123;
object o = i; //装箱
i = 456; //改变i的内容
}
当改变i的值时,因为i是值类型,所以只能改变它自己的值,而无法修改引用类型object类型。可以理解为创建一个object实例,将i的值复制给这个object。
拆箱示例:
static void Main (string[] args)
{
int i = 123;
object o = i;
int j = (int)o; //拆箱
}
先将值类型i进行装箱,然后把转换后的引用类型o进行拆箱处理。切记拆箱时,被转换引用类型的数值必须能够转换为目标值类型

不同类型的参数传递
1:值方式参数传递

1:使用值传递,在方法中对参数值的更改在调用后不能保留。
2:在值方式参数传递时,参数可以是引用类型,也可以是值类型。(没有ref修饰)
3:使用引用类型作为参数传递,虽然没有ref修饰,但是当引用变量发生变化时,参数发生了变化。因此,当类作为参数传递时,参数被修改,类成员的值也会被修改。其他引用类型也一样,如数组。
4:使用值类型作为参数:不能改变值类型参数的值。

2:引用方式参数传递(用ref修饰)
1:使用引用方式(用ref修饰)传递值类型或是引用类型参数时,参数在方法中的修改都会保留。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳落青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值