主要内容包括:算法
C#与.NET的关系、公共语言运行库、中间语言、程序集、.NET Framework类、名称空间、内层管理...数据库
C#是门高级编程语言,.NET(Framework)是个环境,用C#编写的全部代码老是在.NET Framework中运行。编程
它是.NET Framework的核心,在CLR控制下运行的代码称为托管代码。CLR执行编写好的源代码以前,须要编译它。windows
编译分两个阶段:设计模式
1)将源代码编译为Microsoft中间语言(IL)安全
2)CLR把IL编译为平台专用代码。网络
这种设计的重要优势:编程语言
1)平台无关性,依托的是:CTS是通用类型系统,CLS是通用语言规范,函数
2)提升性能性能
3)语言的互操做性,COM、windows运行库
中间语言
应用程序域
就是为安全性,可靠性,隔离性,和版本控制,及卸载程序提供的隔离边界。它一般由运行库宿主建立,应用程序域提供了一个更安全,用途更广的处理单元。
程序集是.NET时代的动态连接库DLL,程序集是包含编译好的、面向.NET Framework的代码的逻辑单元。
程序集包括(中间语言(IL),元数据(metaData),资源(resource),装配清单(AL))。
它包含的元数据(描述自身的数据)描述了对应代码中定义的类型和方法。
能够编程访问这些元数据,这个技术称为“反射”。抽象工厂设计模式中有用到:
static string AssemblyName = Assembly.GetExecutingAssembly().GetName().Name; //获取程序集名称 string className = AssemblyName+".Models" + "." + db + "User"; //命名空间.类名称 (IUser)Assembly.Load(AssemblyName).CreateInstance(className); //获取IUser程序集
可执行代码和库代码,使用相同的程序集结构,他们的区别是:
可执行代码的程序集包含一个主程序的入口点,而库程序集不包含。
属于托管类,使用托管代码的好处是可使用.NET基类库,很是多的类的集合。大部分.net基类库是用C#写的。
是.NET避免类名冲突的一种方式。
Microsoft建议都至少要提供两个嵌套的命名空间名,第一个是公司名,第二个是技术名称或者软件包的名称,再以后是类名。
一、GC(Garbage collector)
GC是垃圾收集器。CLR经过GC实现的自动内存管理。
1)什么被认为是可回收的对象?
GC采用必定的算法遍历全部的对象,找出可达对象和不可达对象,不可达对象是可回收的对象。
2)何时回收?
一般状况下:内存不足溢出时,确切的说,是第一代对象已满的时候。
3)如何回收?
垃圾收集进程来释放不可达对象的内存空间。
4)回收完后,还须要作什么?
避免托管堆上的内存碎片,从新分配内存,压缩托管堆。
5)避免垃圾回收带来的性能影响,采用代龄机制。
如要请求垃圾收集,能够调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
二、托管资源vs非托管资源
资源就是程序中可利用的数据,譬如:字符串、图片和任何二进制数据,包括任何类型的文件。
托管资源是由CLR全权负责的资源,CLR不负责的资源位非托管资源。
对于托管资源经过GC自动清理回收。对于非托管资源,经过代码调用手动进行清除,再由GC回收。
如何正确的释放资源:对于非托管的资源,通常就是,Stream(流),数据库的链接,网络链接等的这些操做系统资源,须要咱们手动去释放。
Net提供了三种释放方法:Dispose,Close,析构函数(也就是Finalize方法)