c#中的一些基本概念
2012-01-14 10:57
246 查看
Tom Archer写的《C#技术内幕》,通俗易懂,翻译行文流畅,菜鸟如我也能顺利地读下去,不错。觉得有些东西还是值得边读边记的,留作以后参考。
C#中的数值类型与引用类型
数值类型:数值类型类似C中的变量类型,当声明一个数值类型的时候,是在栈上分配相应的存储空间,并且后续的操作都是直接针对这些已分配的位。传递一个数值类型的变量时,传递的是该变量的值,而不是对包含其对象的引用。数值类型有基本类型、枚举、结构等。
引用类型:引用类型类似一个指针,指向要引用的对象,引用变量的值是指向某个“堆”的首地址。声明引用类型时,会先在“栈”中分配这个引用变量的空间,如前所述,这只是个指针,指向要应用的对象在堆中的首地址。操作时是直接与该对象的引用打交道,而不是分配的位。引用类型主要有:类、数组、代表、接口等。
装箱与开箱
由来:C#是完全面向对象的。这一点有好处,也有缺点。如果只是随便定义一个Int32的整数也需要创建一个对象的话,显然会降低效率,不如数值类型来的明快,直接对位操作就行。曾经有其他语言做过尝试,将处理的一切单纯看做对象,事实证明,这样的效率是极低的。.NET的“公共类型系统”(Common Type System,CTS)采用了将类型分组的方法,即分为数值类型和引用类型。当简单操作数值时,就用数值类型,当需要对这个数值进行复杂操作时,就把这个数值类型转换为引用类型(也就是说数值类型和引用类型是可以相互转换的),这样就将两种情况分来了。而这个双向的动作分别有名称:装箱和开箱。
装箱就是将数值类型转换为引用类型。
开箱就是将引用类型转换为数值类型。
其中,装箱要用到C#中的一个基类:System.Object。这个类无处不在,只要有C#的程序就会有这个类。一切的变量、类、方法都是继承自这个类。装箱:
int foo = 42;//将foo声明为数值类型
object bar = foo;//将bar声明为应用类型,并将foo装箱为bar,其中bar的引用变量值是它自己在堆中的首地址,而其包含的数据值是foo的值42
开箱的时候类似类型转换,将object的变量转换为相应的形式。为了保证转换的正确,需要显示转换:
int foo = 42;
object bar = foo;
int foo2 = (int) bar;//将bar开箱,把其中包含的数据值赋给foo2,而不是其引用变量值(堆首地址)
C#中的数值类型与引用类型
数值类型:数值类型类似C中的变量类型,当声明一个数值类型的时候,是在栈上分配相应的存储空间,并且后续的操作都是直接针对这些已分配的位。传递一个数值类型的变量时,传递的是该变量的值,而不是对包含其对象的引用。数值类型有基本类型、枚举、结构等。
引用类型:引用类型类似一个指针,指向要引用的对象,引用变量的值是指向某个“堆”的首地址。声明引用类型时,会先在“栈”中分配这个引用变量的空间,如前所述,这只是个指针,指向要应用的对象在堆中的首地址。操作时是直接与该对象的引用打交道,而不是分配的位。引用类型主要有:类、数组、代表、接口等。
装箱与开箱
由来:C#是完全面向对象的。这一点有好处,也有缺点。如果只是随便定义一个Int32的整数也需要创建一个对象的话,显然会降低效率,不如数值类型来的明快,直接对位操作就行。曾经有其他语言做过尝试,将处理的一切单纯看做对象,事实证明,这样的效率是极低的。.NET的“公共类型系统”(Common Type System,CTS)采用了将类型分组的方法,即分为数值类型和引用类型。当简单操作数值时,就用数值类型,当需要对这个数值进行复杂操作时,就把这个数值类型转换为引用类型(也就是说数值类型和引用类型是可以相互转换的),这样就将两种情况分来了。而这个双向的动作分别有名称:装箱和开箱。
装箱就是将数值类型转换为引用类型。
开箱就是将引用类型转换为数值类型。
其中,装箱要用到C#中的一个基类:System.Object。这个类无处不在,只要有C#的程序就会有这个类。一切的变量、类、方法都是继承自这个类。装箱:
int foo = 42;//将foo声明为数值类型
object bar = foo;//将bar声明为应用类型,并将foo装箱为bar,其中bar的引用变量值是它自己在堆中的首地址,而其包含的数据值是foo的值42
开箱的时候类似类型转换,将object的变量转换为相应的形式。为了保证转换的正确,需要显示转换:
int foo = 42;
object bar = foo;
int foo2 = (int) bar;//将bar开箱,把其中包含的数据值赋给foo2,而不是其引用变量值(堆首地址)
相关文章推荐
- 黑马程序员_C#的一些基本的概念
- C#中一些基本的概念
- C#中得一些基本概念
- .NET特性的一些基本概念 via C#
- Tensorflow一些常用基本概念与函数
- 【C#小知识】C#中一些易混淆概念总结(八)---------解析接口 分类: C# 2014-02-18 00:09 2336人阅读 评论(4) 收藏
- oracle 11g RAC 的一些基本概念(二)
- ucos-II中的一些基本概念②
- C# Winform TreeView 的一些基本用法
- oracle 11g RAC 的一些基本概念(二)
- 分布式数据库等其它一些基本概念(三)
- C# 基本概念9
- C# 对sharepoint 列表的一些基本操作,包括添加/删除/查询/上传文件给sharepoint list添加数据
- Boost.Interprocess翻译-一些基本概念
- C#的一些基本操作
- FPGA时序约束的一些基本概念
- mongoDB的读书笔记(04)_【Replica】(01)_Replica的一些基本概念
- Tensorflow一些常用基本概念与函数(1)
- C# 对sharepoint 列表的一些基本操作,包括添加/删除/查询/上传文件给sharepoint list添加数据
- C#学习基本概念之表达式树