本文已参与「新人创作礼」活动,一起开启掘金创作之路。
C#中string和String的区别
- 是相同的,完全是同一个类型,string是String的一个别名,object是Object的一个别名
属性的概念
- 私有成员,再添加getter和setter函数,属性就是这个过程的语法糖,编译时,会把属性转成get和set函数。
- 属性的作用几乎和公共成员变量一致,却拥有更好的可读性和扩展性,同时保护了内部成员的封装性。
简述C#中的浅复制和深复制
- 浅复制只复制指针,不复制指针指向的对象。
- 深复制是即复制指针,也复制指针指向的对象。
- 浅复制会造成两个指针指向同一个引用成员,所以动态成员需要采用身复制(IClonable接口实现深复制)
简述栈和堆的特点和差异
-
假设是32位操作系统,每个程序都可以拥有一个4GB的内存空间
-
栈,托管堆和非托管堆
-
栈是存放局部变量,参数调用的参数
-
托管堆放动态类型,class数组等,托管堆也是连续的但是存在着一些还没有释放的内存块
而当内存不够用时,开始执行垃圾收集,移动和合并内存块,清理内存。
-
非托管堆放非托管的资源
非托管资源,C++的资源,操作系统资源句柄,画刷,线程,数据库连接等,GC垃圾回收机制不适用于非托管堆,非托管资源不是连续的
using语句
- 导入名称空间
- try finally的语法糖,避免手动释放dispose释放资源
- 类型别名
AOP(面向切面编程)
- POP(面向过程编程),以过程为中心,分析解决问题的步骤,然后按步骤实现
- OOP(面向对象编程),解决复杂冗余的问题,提高代码的复用率