Free Hit Counters
http://www.dellasdeals.com

标准答案-有多少人能分得清值类型和引用类型?

引子:

TomiWong 园友发了一个帖子 有多少人能分得清值类型和引用类型?

问题:“class、object、string、int、bool、byte、interface、delegate、struct、enum,以上这些哪些是值类型,哪些是引用类型?”

回帖无数,但是我发现多数还是不明真相的群众。少数几个其实已经感觉到了真相,但是没有表达清楚。因此特此撰文,以正视听。

 

貌似正确的答案

如果要快速给一个一般性而言正确的答案,那么应该如下:

值类型: int, bool, byte, struct, enum

引用类型: class, object, string, interface, delegate

可是问题真那么简单么?难道很多回帖的兄弟都是胡闹?

核心问题

对问题里面的英文理解有歧义

题目应该试图问的,是些关键字定义并声明出来的变量分别是值类型还是引用类型

看看几个有代表性的意见:

============================

#4楼2010-12-03 17:14 | xiaotie     
interface 和其它的不一样吧

============================

#14楼2010-12-03 17:26 | Ivony...     
在这些东西里面:
object、string、int、bool、byte
是类型

class、interface、delegate、struct、enum
不是类型

只能说使用这些关键字定义的类型是引用类型还是值类型

============================

#18楼2010-12-03 17:30 | LeonSun     
我就想问一个问题,class是什么类型?object是什么类型?

本来这个题对名词的定义就是模糊的,恐怕出这个题的人概念也是模糊的

别来误导群众了,真的~~~

============================

好了,意见还是不少的。让我们从头开始梳理问题出在哪里?

1、区分int类型和int类型变量

2、定义TomiWong问题中提到的int是指int型变量还是指int关键字?

3、然后我们才可以开始回答问题

我们平时说惯了,说int是值类型。教科书式的回答应该类似是:

int类型的变量是值类型变量

由此,我们推导出一个简化的说法

int类型是值类型

不少同学在interface、class、object几个关键字上一下子转不过弯来。的确,这几个东西平时不考虑的。我们只说对象类型的变量是引用类型变量,因此看到class的时候第一反应就是他不能算是对象,类不是对象这个是天条。呵呵

这里就出现一个双重标准的问题:

把问题中的所有东西看作他对应的变量,还是就是看做这个关键字,或者看做其代表的类型

class的中文翻译是类,请问类是什么类型?应该什么都不是

如果都看作是关键字,则这些东西也都什么类型都不是

只有当我们统一把他们都看作是变量,是用这些关键字定义并声明出来的变量的时候,才能心平气和地去回答问题

标准答案

C# 类型体系包含下列几种类别:

值类型、引用类型、指针类型

值类型的变量存储数据,而引用类型的变量存储对实际数据的引用。引用类型也称为对象。指针类型仅可用于 unsafe 模式(往极端上说,指针也是值类型)。

通过装箱和取消装箱,可以将值类型转换为引用类型,然后再转换回值类型。除了装箱值类型外,无法将引用类型转换为值类型。

值类型也可以为空(可空类型如:int?),这意味着它们能存储法非值状态。

值类型主要由两类组成:

结构、枚举

结构分为以下几类:

         Numeric(数值)类型

               整型、浮点型、decimal

               整型包括:sbyte, byte, char, short, ushort, int, unit, long, ulong

               浮点型包括:float, double

         bool

         用户定义的结构。

引用类型的变量又称为对象,可存储对实际数据的引用。

class、interface、delegate

内置引用类型:object、string

其实这答案都不是我写的

参考文献

类型(C#)     值类型(C#)     引用类型(C#)

我们都需要抽空看看  C#编程指南

posted @ 2010-12-04 21:50  徐少侠  阅读(2911)  评论(38编辑  收藏
作者:徐少侠 出处:http://www.cnblogs.com/Chinese-xu/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过 Chinese_Xu@126.com 联系我,非常感谢。