标签:
无论上层语言类型多么复杂,在.net平台上,都逃不过CTS 的约束,今天我想谈的不是CTS,而是上层语言C#类型的一点研究。
public struct test
{
public override bool Equals(object obj)
{
return base.Equals(obj);
}
}
这是我随便定义的一个结构,可以看到这个结构什么都没继承,但是我却可以重写出Equals方法,这个方法来自哪里,这个结构的父亲又是谁?
ValueType!
是的 所有的结构都默认继承了该类,对的这是一个类,也就是说所有的结构都是有继承的,继承了ValueType,也是因为这样,所以结构不再能继承类,只能继承接口,因为C#是单继承的。
ValueType! 还是ValueType!
因为结构默认是继承了ValueType,也就是继承了Object,所有其实结构可以看成一个类,只是这个类很特别,比静态类,最终类还特别,区别包括:编译时会对他进行特殊处理,内存分配规则,不能被继承,实例化过程等等。所以结构在写法上和类很多地方很像,比如也可以拥有方法,等等,其实结构就是一个被阉割得非常厉害的类。
enum也是值类型 为什么这么说呢?
所以 并不是所有继承ValueType的都是值类型(这个类我们自己也可以写个类去继承)
值类型的特点:值类型的数据特点很多,大多是和类做区分的,具体可参照http://www.jb51.net/article/53653.htm
答案是引用
IComparable i = 0;
当用接口指向值的时候 这个值会有一个装箱的过程,也就是值类型会装箱成一个引用类型
证明过程http://blog.csdn.net/qing2005/article/details/6492906
在刚接触C#的时候,老师给我说c# 和java很大的区别是c#里面只类型也是对象,他给我的证明理由是int也可以.出ToString()。写到这也解决了心中的一大惑憾。希望能给大家一点帮助。
一点笔记参考:2015.7.29
转载备注http://blog.csdn.net/shanghongshen/article/details/47126021
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/shanghongshen/article/details/47126021