C#中对值类型和引用类型的一点认识
来源:互联网 发布:护肤 知乎 编辑:程序博客网 时间:2024/05/16 06:58
区别值类型和引用类型的重要一点就是值类型赋值的时候是给出一块内存空间,空间里放下要赋给值类型的值。而引用类型是开辟一块内存空间,空间里放下的是要赋给引用类型值的指向地址。
就像一个是复制了银行卡里的现金,你花了你复制的现金,和该银行卡是没有关系的。而引用类型是复制了一个银行卡,此卡为银行卡的副卡,因为他们的指向地址是一样的,所以当你使用副卡
的时候,主卡里的钱也会随之变动。
下面给出一段代码。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace WindowsConsoleApplicationValueAndReference{ class Program { static void Main(string[] args) { ReferenceAndValue.ReferenceAndValueMethod(); } } public class Person { public string Name { get; set; } public int Age { get; set; } } public static class ReferenceAndValue { public static void ReferenceAndValueMethod() { Person tang = new Person { Name = "Andelshejlsberge", Age = 25 }; int age = tang.Age;//age=tang.age=25 tang.Age = 22; Person name = tang;//name.Name=andelshejlsberge tang.Name = "tangxuelong";//tang.name=tangxuelong name.name=tang.name=tangxuelong Console.WriteLine("tang.Name={0}",tang.Name); Console.WriteLine("tang.age={0}", tang.Age); Console.WriteLine("age={0}", age); Console.WriteLine("name={0}", name.Name); Console.ReadLine(); } }}
分析一下代码。首先创建了一个person类,该类中包含name和age俩个属性
我们在方法中创建person的对象tang,初始化对象的name和age。
这时候看下一步,我们将对象tang的age赋值给一个int类型的变量age,然后改变对象tang的age的值,运行结果会告诉我们,此时age=25,tang.age=22;
接下来我们继续看下面的代码,继续创建一个对象将tang赋值给该对象。那么此时如果加入断点的话我们都知道name.Name=tang.Name=andershejlsberge这是没错的。那么接下来像上面一样我们改变tang.name的值我们会发现,name.name的值此时也改变了。
就像开始说的那样,引用类型不仅仅分配了内存空间,还解析了内存块的指向地址。
装箱和拆箱
装箱和拆箱其实就是引用类型和值类型之间的转换
值类型转换为引用类型就是装箱,引用类型转换为值类型就是拆箱。
public static class boxingAndUnboxing { public static void boxingandunboxing() { int ageInt = new int(); //boxing object age =(object)ageInt; age = null; //unboxing ageInt = (int)age; Console.WriteLine(ageInt); } }
分析一下上面的代码。这段代码会抛出System.NullReferenceException异常,因为age为引用类型,引用类型是可以赋空值的,然后将引用类型转换为值类型时,引用类型没有值。。
所以就抛出了异常。而去掉这段代码输出结果为0,这是因为我们没有初始化,默认的值类型变量的值就为0
- C#中对值类型和引用类型的一点认识
- 对值类型和引用类型的全方位认识
- C#中引用类型和值类型
- C# 中引用类型和 值类型
- C# 中引用类型 和值类型
- c#中引用类型和值类型的区别
- C# 中 值类型和引用类型的区别
- C#的值类型和引用类型
- C#的引用类型和值类型
- C#的值类型和引用类型
- C++和C#有关值类型和引用类型,以及对引用类型使用ref的效果
- 对C# 中堆栈,堆,值类型,引用类型的理解
- C#中引用类型和值类型分别有哪些
- C#中引用类型和值类型分别有哪些
- C#中引用类型和值类型分别有哪些
- C#中引用类型和值类型分别有哪些
- C#中引用类型和值类型分别有哪些
- 对值类型和引用类型的理解
- Android四大组件之 BroadCastReceive 使用总结
- C#中使用ref 和 out 的一点认识
- C#随机双色球
- WAMPServer的外网访问的问题
- qt5_qml_Opengl_shader 第二弹----------------------纹理贴图(RGB)
- C#中对值类型和引用类型的一点认识
- 文件指针和文件描述符的区别
- C#中四个判等函数的认识
- C#中ISpostback
- C#向oracle 写sql语句ORA-00911错误及解决方法
- Jquery()核心函数的7个重载方法
- .NET 各种问题汇总
- C#基础
- 鸡啄米vc++2010系列20(常用控件:编辑框)