就比如说int吧,是值类型,是个struct,是这样声明的
public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int>哪能看出来继承自ValueType??  再说struct不是不能继承吗?为什么说继承自ValueType??不解。

解决方案 »

  1.   

    在本身继承的接口中,接口继承了valuetype,所以说继承自valuetype
      

  2.   

    不能继承是相对的,C#里面所有的都继承至System.Object
      

  3.   

    IComparable。这些是接口。struct 在c++中相当与类或是说就是类的一种特殊形式。所以就可以了
      

  4.   


    我知道所有的都继承自Object,值类型继承自ValueType,这些都是书上写的,应该是事实。
    但是我想知道为什么,或者我怎么能够看出来?至少我从Int这个典型的值类型的声明看不出来它继承自ValueType或任何类。而且它本身是struct也不是一个类。
    而且这与struct不能继承这个事实也有矛盾。
      

  5.   


    可是我是说C#啊,C#中的struct和C++中的struct应该差别很大吧。
      

  6.   

    很多类型都没有显示的继承基类,.net默认为继承object,以string为例,只直接继承object的.
    struct是直接继承valuetype的,默认的,但struct有个特点,不能显示继承基类,即只能继承valuetype,所以就这样了.所以就像楼主看的一样了
    书上说不能继承基类了,是因为C#是单继承了,已经有这valuetype了,所以不能继承了
      

  7.   

    在C#里不管它是value type 还是 reference type都可以看成是类, 是Object的子类. 如你定义任意一个类,
    int a = 10 或 Label s = new Label(),它们都会有 ToString(), GetType(), GetHashCode()等继承自OJBECT类的方法。区别是value type 和 reference type在内存中的存在形式不一样,这是C#底层的管理机制。比如:当建立一个value type时,系统为这个value type分配独立的内存空间,并以数值形式保存。如:
    int a = 5;
    int b = a;
     
    b = 3;打印结果是 a = 5 , b = 3.
    当建立一个reference type时,上面操作则建立一个指向同一object的指针(Reference),如:
    Label labelA = new Label();
    labelA.Text = "123";Label labelB = labelA //labelB是指向labelA的指针。labelB.Text = "456";这时显示labelA,LabelB的结果都是456. 因为就理解来说可以认为labelB就是labelA(其根本是分配给labelB的内存空间保存的是labelA的内存地址,所以说labelB是指向labelA的指针)所以在.NET里,不管是value type 还是 reference type,都是ojbect, 不矛盾,区别是内存分配管理机制不同。Struct是value type。
      

  8.   


    看了原版微软c#书,没看到说有value type这么个东东可以继承,只说struct是value type, 这是怎么回事?
      

  9.   

    value type是非常有限的几种,如所有和数值的关的int, double..., 日期DateTime, 结构Struct
    其它都是reference type.个人觉得,除了struct, 无法像添加自定义class那样添加一个自定义的value type.
      

  10.   

    值类型是不能派生出其他类型
    继承自valuetype是.net自动给你加上了
      

  11.   

    个人感觉,valuetype是给编译器用的,程序员不能直接使用。在定义struct时候编译器会自动认为继承自valuetype。
    声明并不能反映所有信息,你可以用is ValueType 来判断下。
      

  12.   

    值类型都是继承自ValueType, 而ValueType是继承自System.Object,这是对的,用ildasm反编译工具可以看到这个继承关系。至于为什么在VS里面看不出来,个人理解是: 由于所有值类型都要继承自ValueType,所以VS自动帮程序员做了这个事情,并且没有显示出来。就象程序员声明一个class的时候不需要声明继承自System.Object, 声明一个值类型时也不需要声明它继承自ValueType.