就比如说int吧,是值类型,是个struct,是这样声明的
public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int>哪能看出来继承自ValueType?? 再说struct不是不能继承吗?为什么说继承自ValueType??不解。
public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int>哪能看出来继承自ValueType?? 再说struct不是不能继承吗?为什么说继承自ValueType??不解。
我知道所有的都继承自Object,值类型继承自ValueType,这些都是书上写的,应该是事实。
但是我想知道为什么,或者我怎么能够看出来?至少我从Int这个典型的值类型的声明看不出来它继承自ValueType或任何类。而且它本身是struct也不是一个类。
而且这与struct不能继承这个事实也有矛盾。
可是我是说C#啊,C#中的struct和C++中的struct应该差别很大吧。
struct是直接继承valuetype的,默认的,但struct有个特点,不能显示继承基类,即只能继承valuetype,所以就这样了.所以就像楼主看的一样了
书上说不能继承基类了,是因为C#是单继承了,已经有这valuetype了,所以不能继承了
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。
看了原版微软c#书,没看到说有value type这么个东东可以继承,只说struct是value type, 这是怎么回事?
其它都是reference type.个人觉得,除了struct, 无法像添加自定义class那样添加一个自定义的value type.
继承自valuetype是.net自动给你加上了
声明并不能反映所有信息,你可以用is ValueType 来判断下。