1、如果你的类型的实例将要放入集合类中,请不要实现为值类型。因为在集合类中将会把值类型装箱使用,并且你在使用集合中的某个Item时,又需要进行拆箱操作。大量的装箱、拆箱作会影响到性能(拆箱操作并不影响到性能,因为它仅仅是返回装箱对象中成员的地址,但是通常拆箱后会伴随着拷贝字段的操作,这也是一个影响性能的因素。)
2、对一个对象执行拆箱操作时,转型的结果必须是它原来未装箱时的类型,否则会抛出InvalidCastException异常:

object o = 3.0;
Console.WriteLine(o);

//抛出InvalidCastException异常
int i = (int)o;
Console.WriteLine(i);

//正确的写法
int j = (int)(double)o;
Console.WriteLine(j);



3、参考FCL,会发现许多重载方法的差别就在它们的值类型参数上。我们在实现某个类型的接口时,如果可能会用到值类型的参数,不妨提供各值类型参数的重载版本,目的就是可以减少客户端调用时的装箱操作。
4、当我们必须将一个类型实现为值类型的时候,可以考虑重写ToString()、Clone()、GetType()等方法,这样,当我们在将这个类型的实例传递给一需要引用类型的方法时,可以免除装箱操作。
5、值类型在用在需要接口的地方,总是必须执行装箱操作。
6、在我们的代码将会对同一个值类型实例执行多次装箱操作的时候,我们可以自己先做这样的装箱操作,然后将得到的装箱引用类型的实例传递过去,可以减少装箱次数。

汗颜以前随意使用类型的情况,仔细回顾了以前的做法,真的是无地自容

posted on 2004-11-26 01:32  烂瓶子  阅读(1057)  评论(4编辑  收藏  举报