.Net培训个人总结笔记5
学习交流,欢迎转载。转载请注明文章来源:http://www.cnblogs.com/lgjspace/archive/2011/10/12/2211048.html
拓展:
C#也能使用指针,但是是“罕用指针”,约束很多,一旦使用指针,就要把使用指针那部分的代码用关键字 unsafe 来明确标记起来。而且在C#中的指针不像C/C++那样可以指向任何类型的数据,C#的指针只能指向结构体。C#的指针一般是用在性能要求高或者是和以前用C/C++写好的程序接驳、兼容,也有种情况,就是:有些算法或技术含量较高的代码为了保密性而用C/C++来写,而此时C#的程序要用这些代码而恰好这些代码又要用到指针类型参数的话,就有可能用到指针。
技巧:
在C#中,所有的值类型都是结构体。可以通过选中VS的“视图”→“代码定义窗口”(Code Definition Window),然后鼠标定位到代码中需要查看定义的类型、属性、方法等名字或关键字上,即可在“代码定义窗口”中看到相关的内部代码(如果代码没被.Net框架屏蔽的话)。
细节:
1. 在C#中,无论是结构体(struct)还是类(class),其成员默认访问级别都是私有(private)的。这和C/C++中的有点不同,在C/C++中,结构体(struct)的默认访问级别是公共(public)的,而类(class)的默认访问级别是私有(private)的。
2. 在内存的存放位置上,C/C++的结构和类都是放在堆中的,而C#中,只要是值类型就放到栈上,只要是引用类型就放到堆(托管堆,由CLR 管)上,所以结构体是被放在栈上的。
3. 在C#中,每个整形数值占 4 个字节。
细节:
DLL,即动态链接库(Dynamic Link Library)。
把代码编译成 DLL,可以有助于程序后期的部分修改维护(只要更新需要修改的 DLL 文件即可,不用整个程序重新修改、编译)、实现程序的代码分层、团队的协作等。
经验:
三层架构(用户界面层(UI)、业务逻辑(BL)、数据访问(DA))中,一般BL层的DLL会比较多,功能分得比较散,这样升级时要更新的文件体积就比较小。
细节:
GAC(即:Global Assembly Cache,全局应用程序集缓存)的查找策略
为什么自己写的 DLL 可以在程序文件夹下附有,而.Net框架的 DLL(如“System.Data”等)就不会被放到程序文件夹里,这现象可以通过选中两种 DLL (自写的和.Net官方的),在属性窗体中查看“复制本地”(Copy Local)和“路径”(Path)来查看得出。查看Windows文件夹下的 assembly 文件夹,该文件夹下显示的都是已经在GAC注册过的DLL的“映射”。每个程序在安装时程序都会到GAC注册自身所要用到的.Net FrameWork 中的类库,以便以后调用。
拓展:
.Net平台下编译的DLL之所以能“绿色”,是因为其编译出的DLL都是自解释的。
经验:
1.用DLL可以实现物理层面的层次分离。
2.越用用的部分就越要放到DLL中,一定要这样。
易错:
1.数组在内存中肯定是连续的。
2.数组本身是引用类型,然而它可以存放值类型的元素,但这些元素并不是放在栈里面,而是跟着数组本身放到托管堆上了。
3.通过在声明数组前加上 关键字可以强制使数组存放在栈里面,这样的话能使对数组的操作会快些,因为此时的数组不会像放在堆里面时的那样索引地址随时会改变,然而把数组放到栈上也有缺点,栈的空间是有限的,大数据量的数组可能会有占满栈的情况,而堆的空间如果满了的话还可以利用硬盘的空间来代替。
4.C#中的字符串和C语言中的一样都是用“\0”(ASCII码的第一个字符)来标记字符串的结束,但求字符串长度Length的时候,是不会算上这个“\0”的。