深入C#数据类型

1. 值类型

值类型源于System.ValueType家族,每一个值类型的对象都有一个独立的内存区域用于保存自己的值,值类型数据所在的内存区域成为栈(Stack),只要在代码中修改他就会在他的内存区域内保存这个值。对于值类型,不同的变量会分配不同的空间,并且存储空间存储的是该变量的值。

2. 引用类型

引用型源于System.Object家族,在C#中引用类型主要包括,数组吗,类,接口。引用类型赋值是把原对象的引用传递给另一个引用,对数组而言当一个数组引用赋值给另一个数组引用后,这两个引用指向同一个数组,也就是指向同一块存储空间。

数组复制可以利用循环使用
	for (int I = 0 ; I <array1.Length; i++)
	{
		Array2[i]=array1[i]
	}
	把array1[i]里的数据添加到array2[i]

3. 细分值类型和引用类型

值类型:基本数据类型,枚举类型(enum),结构类型(struct)
引用类型:类,接口,数组

结构的定义:
语法:
访问修饰符 struct 结构名
{
//结构体
}

C#中值类型和引用类型的区别

  • 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的 地址。
  • 值类型存取速度快,引用类型存取速度慢。
  • 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
  • 值类型继承自System.ValueType,引用类型继承自System.Object
  • 栈的内存分配是自动释放;而堆在.NET中会有GC来释放
  • 值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。

- 结构的定义特点:
  • 结构中可以有字段,可以有方法
  • 定义时,结构中的字段补不能被赋初始值
- 结构的使用
  • 可以不用new直接定义结构的对象
  • 生命结构的对象后,必须给结构的成员赋初值
- 结构的使用经验

既然结构和类非常相似,是不是所有类都可以用结构来实现? 结构是值类型声明结构变量就存储结构的一个新副本,及系统要开辟一块新的存储空间,因此结构用的越多,存储空间用的也越多。int就是一个结构

- 装箱和拆箱(值类型和引用类型相互转换)
  • 装箱:值类型转换为引用类型的过程称为装箱。
  • 拆箱:引用类型转换为值类型的过程称为拆箱。

装箱式例:

       int i = 123;
        object o = i;   //装箱
        int=456;

拆箱式例:

        int i = 123;
        object o = i;
        int j =(int) o;		//拆箱

经验:在实际开发中,尽量减少不必要的拆箱和装箱,因为二者的存储方式不同转换时性能损失较大。

不同参数的传递

值(value)传递和引用(reference)传递

  1. 使用值传递,在方法中对参数值的更改在调用后不能保留。
  2. 使用ref方式传递,可以保留对参数值的更改。

小结:

  • 使用值方式(不用ref)传递值类型参数时,参数在方法中的修改不会保留
  • 使用值方式(不用ref)传递引用类型时,参数在方法中的修改会保留
  • 使用引用方式(用ref)传递值类型或引用值类型参数时,参数在方法中的修改都会保留
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值