C#类型和变量——两种类型

类型和变量这一块内容挺多额,好像昨天面试的时候被面试到了,忘了(好糗!)


C#里有两种类型:

值类型(value types):

a,值类型的变量直接包含它们的数据

b,每个变量拥有自己的副本,所以对其操作不会影响另一个(except ref 和 out 参数变量)。

引用类型(reference typeset):

a,引用类型的变量保存的是它们对数据的引用,也成为对象。

b,两个变量完全可能引用同一个对象,所以对一个变量的操作会影响另一个引用此对象的变量。


误区:值类型存储在”栈“中,引用类型存储在”堆“中。(来自ERIC LIPPERT的分析)

解释:a,这只描述了两种类型运行时实现细节的差别,并非关于语言本质的差别。

     b,本身不正确,与引用类型相关联的数据的确存储在堆中,但这些数据也可能包含值类型的实例,因此值类型也可能存储在堆中。

真正的区别:值类型是按值复制而引用类型仅仅复制引用。


C#的类型系统:

值类型:

简单类型(Simple):带符号整数,无符号整数,Unicode字符,IEEE标准浮点数,高精度数值,布尔值

枚举类型(enum)

构造类型(struct)

空属类型(nullable)

引用类型:

类类型(class)

接口类型(interface)

数组类型(array)

委托类型(delegate)


补充:

(来自CHRISTIAN NAGEL)

C++程序所面临的一个问题是,规范中没有定义short,int,long类型数据所占的字节个数,导致在16位,32位,64位机器上占用不同的字节空间。

而C#则明确规定了数值类型数据的长度,该长度与平台无关。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值