日期:2014-05-17  浏览次数:20857 次

基类object
       基类object是最顶层的类,所有 的类都继承于它,string也是一个类,但它声明时为什么不用new啊?而用string a="";还有很多东西都是从类继承过来 的,为什么到最后不是类了啊,比如一些值类型的int  double  struct,他们就不是类了,而他们怎么从一个基类object演变成来的啊,就算是继承,它的那类的性质不会变的啊,它这些问题捆扰了我很久了,请大神指点指点。

------解决方案--------------------
15年前在秘密研发c#的时候,我相信是为了兼容c语言string。

这种东西叫做“语法糖”。是编译器设计者特意给你做出来的“效果”,你可以把string当作特例。

string对象实例不需要new,用双引号把值包含起来就相当于new了。

而且也不支持引用,把一个字符串赋值给一个声明为string类型的变量,并不是如其它类型对象的变量那样的引用,而是相当于copy/clone。(当然,.net系统会自动维护一个内部字典,仅当需要copy的时候才copy,不需要的时候仍然是会让多个变量引用相同的一个string)
------解决方案--------------------
Int32 i=new Int32()
这种写法实际也是可行的。值类型比如Int32 的机构实际是结构体(vs中选择Int32 按F12 可以查看)。既然是结构体我肯定不需要new了。
楼主的意思是想寻根究源,比如Int32派生子ValueType,但是我在vs当中压根不能看到它继承了ValueType的啥玩意,我用reflector看了下,也没发现啥。估计有些信息是被隐藏了吧。
帮顶一下 sp1234帮忙 结贴时也回复我一下 共同学习
------解决方案--------------------
引用:
    本想对整个类的继承关系有个结构性的全面的了解,但自己知识现在有很多不足,解决不了.你觉得我该多看看哪方面的知识来解决这些疑惑


如果你能把大学的那些基础课学好,很多问题才能“理解”。你没有那种思维方式,学习起来自然困惑。

比如说,大学物理告诉你,基本粒子有波粒二相性。似波非波,似粒子非粒子,你既可以理解为波,也可以理解为粒子,从不同的角度看。如果你能理解这个问题,那么你看到ValueType和object的关系就不会书上讲的都看了,就是觉得很矛盾的事情。比如说大学数学告诉你,对于一个变化量,自变量无限小的时候用变化量除以自变量就是求导,你用小学生的思维,两个都趋向无限小的数字相除,这是什么,你就是不能理解。