2012年8月22日
摘要: 在类型转换的过程中,有些类型之间可以直接转换(如int->double),而有些就必须显示强制转换(如double->int)。类型转换遵循这样的规则:无论源变量中存什么值,转换成目标变量总是安全的(不会丢失数据,不会异常等等),那么就可以直接转换(隐式转换)。反之,如果转换成目标变量有可能会出错,如数据丢失或者异常等等,那么就必须显示的强制转换。一、自定义类型转换 我们都知道,当想把一个int类型转换成一个double类型的数据的时候,直接就可以完成。我们考虑一下这种情况,如果我们有一个描述长方体的结构体,里面保存了长、宽和高。想要获取的体积会怎么做?很明显首先想到的是在机构体里 阅读全文
posted @ 2012-08-22 23:49 细小猛 阅读(594) 评论(0) 推荐(0) 编辑
摘要: 在所有类型的基类中(System.Object)定义三个不同的方法,用于比较对象的相等性。下面我们分别来看看这三个方法:一、静态方法ReferenceEquals()从名字我就很容易看出来,这是用于比较两个对象是否具有相同的引用。因此这个方法对于值类型是没有任何意义的。因为值类型转换成引用类型有一个装箱的过程,每次都会得到不同的应用。所以对于值类型这个方法的返回值永远是false。二、静态方法Equals()这个方法和虚拟的实例方法作用相同。不同在于它处理了null的情况。如果两个参数都是null,则返回true,如果有一个为null则返回false。如果两个参数都不为null,则调用实例的E 阅读全文
posted @ 2012-08-22 01:01 细小猛 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 温习一下平时不怎么用到和不太注意的运算符。一、checked和unchecked运算符。使用checked运算符,CLR会执行溢出检查,如果发生溢出则会抛出OverflowException异常。看下面的代码:byte by = 255;by++;Console.WriteLine(by);由于byte的最大值就是255,再对它进行自加操作,就超出了它的范围。因此运行我们得到的结果是0。如果我们把这段代码放在checked模块中:checked{ byte by = 255; by++; Console.WriteLine(by);}再运行代码便会抛出Overfl... 阅读全文
posted @ 2012-08-22 00:18 细小猛 阅读(139) 评论(0) 推荐(0) 编辑