一:.NET的体系结构

C#和.NET关系

C#语言不能孤立使用,必须和.NET Framework一起。C#编译器基于.NE。也就是说C#所有代码总是使用.NET Framework运行

C#是一门专门为.NET Framework使用而设计的。

C#是一种基于现代面向对象设计的语言。

公共语言运行库

.NET的核心是运行库执行环境。称为公共语言运行库(CLR)或.NET运行库。在CLR下运行的代码称为托管代码

C#编译有两个阶段

1:将源代码变为为微软的中间语言IL

2:CLR将IL编译为平台专用的代码

IL的优点

  • 平台无关性(到.NET 4.5.1为止还仅仅停留在理论范畴,也就是仅仅用于Windows平台)。包含的字节码指令可以放在任意平台中。
  • 提高性能:IL比Java的字节码作用还要大,IL总是即时编译的。即不是一次编译整个应用程序,而是只编译调用的部分。代码编译后得到本地可执行程序就存储起来。只到退出程序。下次运行这部分代码就不需要重新编译了。
  • 语言互操作性:可以将其他语言也编译成IL(VB,VC,VF#,COM和COM+,windows运行库)

中间语言IL的主要特征

  • 面向对象和接口支持
  • 不同的值类型和引用类型
  • 强数据类型化:所有的数据必须有类型。

公共语言规范(CLS)

公共语言规范(Common Language Specification)和通用类型系统一起确保语言的互操作性。

CLS是一种最低标准集,所有面向.NET的编译器都必须支持。

C#中非CLS兼容特性非常少。

垃圾回收

垃圾回收是.NET进行内存管理。

Windows平台有两种技术释放内存。一是完全手工。如C++。优点是高效,缺点是容易出错。二是让对象维护引用计数。即每个组件保存计数器,当客户端引用为0时删除自己。但是问题是可能客户端没有这么做,这样问题更严重。

.NET运行库的方法时垃圾回收器。方法是所有动态请求的内存都分配到堆上。.NET定期检测堆是否内存已满,如果已满就调用垃圾回收器进行清理。如果有些对象没有引用,就删除。

程序集(Assembly)

程序集是包含编译好的,面向.NET Framework的代码逻辑单元。

程序集是自描述的。它是一个逻辑单元二不是物理单元,可以存储在多个文件中。如果是多个文件,就会有一个包含入口的主文件。

程序集的一个重要特征是它包含了元数据,描述了代码中定义的类型和方法。元数据包含在称为"清单(manifest)的区域中。程序集入口文件存储了不同文件的细节,如果有文件被篡改或替换,系统可以检测出来拒绝加载程序集。

程序集有两种类型:私有程序集和共享程序集

私有程序集

是最简单的程序集类型。一般附在某个软件上。且只能用于该软件。常见的情况是,以可执行文件或库的方式提供应用程序。这些库的代码只能用于该程序。

系统可以保证私有程序集不被其他软件使用。因为应用程序只能加载位于主执行文件所在文件夹或子文件夹的私有程序集。

私有程序集部署很简单,只需要复制文件即可。

共享程序集

是其他应用程序可以使用的公共库。需要采取措施防止风险:重名风险,不同版本覆盖的风险。

方法是把共享程序集放在文件系统中一个特定的子目录中,称为全局程序集缓存(GAC)。与私有程序集不同。不能简单的文件复制。而需要专门安装到缓存中。有许多工具可以完成。

为了避免名称冲突,根据私钥加密算法为共享程序集指定了一个名称,该名称是强名(strong name)。并保证唯一性,它必须要由引用共享程序集的应用程序来引用。

反射

因为程序集存储了元数据。包括在程序集中定义了所有类型和成员的细节。所以可以通过编程访问这些元数据。这个技术成为反射。

反射非常有用,托管代码可以检查其他托管代码,甚至自己。可以作为实例化类或调用方法的一种间接方式。

并行编程

针对多处理器的编程。有新的可用API和类库。不过要注意死锁。

异步编程

C#5.0以Task Parallel Library中的Task为基础,提供了新的异步编程。新的异步方法很简单,只需要两个关键字async和await即可。

.NET Framework类

.NET基类是一个内容丰富的托管代码类集合。可以完成以前要通过Windows API来完成的大部分任务。

.NET基类的主要优点是直观易用。如启动一个线程可以调用Thread.Start()方法。除了极少数的情况.NET基类不需要调用Windows API函数。

.NET基类主要内容如下

  • IL核心功能:基础数据类型等
  • Windows UI支持和空间
  • ASP.NET使用Web窗口和MVC
  • ADO.NET和XML数据访问
  • 文件系统和注册表访问
  • 网络和Web浏览
  • .NET特性和反射
  • COM互操作

命名空间

命名空间是.NET避免类名冲突的一种方式。

命名空间仅仅是数据类型的一种组合方式。但是命名空间中所有数据类型的名称都会自动加上命名空间作为前缀。

建议项目的命名空间以 公司名+项目名的方式命名。

C#创建的.NET应用程序

ASP.NET Web窗体程序

ASP.NET MVC

Web服务器程序

WPF(两种桌面程序之一,一种是Windows窗体,还有一种是Windows Presentation Foundation)

Windows Stroe应用程序

Windows 服务(NT服务):基于Windows NT内核的操作系统上后台运行的程序。C#编写服务非常简单,System.ServiceProcess命名空间的类可以处理。

WCF:ASP.NET Web API可以实现客户端和服务器之间的通信。使用非常简单,不过没有SOAP协议丰富。

Windows WF(Windows Workflow Foundation)

猜你喜欢

转载自www.cnblogs.com/yuanhaowen/p/9932750.html