黑马程序员技术交流社区

标题: System.Enum是唯一不为值类型的引用类型,这句话怎么理解? [打印本页]

作者: laoyang    时间: 2011-11-22 11:01
标题: System.Enum是唯一不为值类型的引用类型,这句话怎么理解?
System.Enum是唯一不为值类型的引用类型,这句话怎么理解?
作者: 朱勋    时间: 2011-11-22 20:06
给你推荐一篇文章http://developer.51cto.com/art/200908/143309.html很详细
作者: 乔克    时间: 2011-11-23 22:16
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之外其它都是值类型。

作者: 杨楠    时间: 2011-11-23 23:21
拜读了。。。牛!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2