A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

System.Enum是唯一不为值类型的引用类型,这句话怎么理解?

3 个回复

正序浏览
拜读了。。。牛!!
回复 使用道具 举报
乔克 黑马帝 2011-11-23 22:16:13
藤椅
1.值类型(valueType):比如int, char,float,double等,在C#中,我们可以通过struct 和enum来自定义值类型
  1. public struct Size
  2.     {
  3.         public int x;
  4.         public int y;
  5.         public void Show()
  6.         {
  7.         console.write("{0},{1}",x,y);
  8.         }
  9.     }
复制代码
当然,类似的我们也可以定义一个类
  1.   public class CSize
  2. {
  3. public int x;
  4. public int y;
  5. public void Show()
  6. {
  7. console.write("{0},{1}",x,y);
  8. }
  9. }
复制代码
很显然,Size是valueType的, 而CSize是reference type的。
2.所有的值类型都是System.ValueType的后代,枚举类型也不例外,枚举类型直接继承自System.Enum,而System.Enum却又直接继承自System.ValueType的,所以,枚举类型也是System.ValueType的后代。
3. 所有枚举类型(enum type)都是值类型。
4. System.Enum和System.ValueType本身是引用类型。
5. 枚举类型(enum type)都是隐式的直接继承自System.Enum,并且这种继承关系只能由编译器自动展开。但System.Enum本身不是枚举类型(enum type)。
6. System.Enum是一个特例,它直接继承自System.ValueType,但本身却是一个引用类型。


总结:正确的说法应该是“值类型都是System.ValueType的后代”,但System.ValueType的后代不全是值类型,System.Enum就是唯一的特例!在System.ValueType的所有后代中,除了System.Enum之外其它都是值类型。

评分

参与人数 1黑马币 +2 收起 理由
陈涛 + 2

查看全部评分

回复 使用道具 举报
朱勋 黑马帝 2011-11-22 20:06:10
沙发
给你推荐一篇文章http://developer.51cto.com/art/200908/143309.html很详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马