什么叫值类型?(或者说值类型有哪些特点?):
直接将内存存储在栈内,由系统自动释放资源的数据类型.
有 整型:Int; 长整型:long; 浮点型:float; 字符型:char; 布尔型:bool; 枚举:enum; 结构:struct;
在C#中所有的值类型都继承自:System.ValueType.
基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
什么叫引用类型?
有以下一些引用类型:
数组(派生于System.Array);
用户自定义的以下类型:类:class(派生于System.Object);接口:interface;委托:delegate(派生于System.Delegate);object(System.Object的别名);字符串:string(System.String的别名)。
我们来看一段代码:
![](https://img.haomeiwen.com/i728116/fb7ac127b584062f.png)
实例化值类型与引用类型之后,输出结果,当改变类和结构中的成员变量时,再输出结果
![](https://img.haomeiwen.com/i728116/419365ec878f5fd4.png)
我们看到当改变ref2和value2中x和y的值时,ref1中的x也跟着改变,而value1中的y并没有跟着改变,看图例
![](https://img.haomeiwen.com/i728116/d5dc6cef37b1f75c.png)
值类型赋值时会重新在栈中开辟一块包含相同值的内存空间,而引用类型赋值时值存储在堆中,只是在栈中复制了一份对堆中对象的引用(内存地址,指向堆中值), value1和value2这两个地址指向的是同一个堆中的值,所以x会改变,y不会改变
网友评论