关于基元类型

其实丫就是编译器提供的简便方法,类似
int, var 之类的,当然 var 是深得我心。 少打了好多字~
int i; 编译器在编译的时候 就会变成 System.Int32 a = new System.Int32();
这些都是编译时候做的 所以没有损失
PS: 那人不推荐用基元类型。意思大概是造成的歧义~ 比如不同编译器(不过... 谁会用其他编译器呢)

关于值类型和引用类型

老生常谈~
值类型: 放在线程栈上面的.
不受垃圾回收的控制, 那玩意儿快. 因为栈的机制问题,上文中说过
引用类型:放在托管堆上的. new 之后会返回在堆上面的内存地址~
这里那人提到了引用类型的开销问题:
1.内存在托管堆上分配
2.额外成员
3.其他字节总是设置为0 (这块~ 难道是局部变量?)
4.可能会造成一次强制的垃圾回收


当在class中的 值类型是怎么样的呢?.. 应该也是放在托管堆上的,具体的有时间反编译看看吧.

这里是作者关于申明值类型的一些建议
1.简单, 没有什么修改(比如一个结构,如果你修改他的值,很容易在没有预料的情况下发生装箱操作~ 小心为上)
2.不需要从其他类型中继承
3.也不需要去派生其他类型
4.没有频繁传递. 值类型是直接复制哦 ~
5.大小较小,如果比较大 最好没有传递.
6. 赋值. 同复制~

关于值类型的拆箱装箱

ps:你去面试的时候.当考官问你 什么是拆箱和装箱啊~   值类型和引用类型的转换.应该就不会往下问下去了..
当然装箱和拆箱尽量要避免 这玩意儿消耗还是不小的.

装箱:
在托管堆中分配内存, 分配值类型所需的内存 + 之前说个那两个额外成员(指针和索引.. 简写了)。
然后 从线程栈里复制到这里 返回地址~

拆箱:跟装箱的操作是不同的.他的消耗要小很多.
int i = (int32)p;
他是获取指针的过程,而这个指针指向了 内存中没有装箱的那个部分

最后: 避免装箱的方法有很多种, 泛型 , 接口等等 都能避免装箱.这个以后再慢慢说..

关于 dynamic 基元类型

这个应该在后面写~ 或者到时候再来补上

posted @ 2011-07-20 22:02  CallMeTommy  阅读(162)  评论(0)    收藏  举报