C#笔记整理(1)C#初步
一.C#和Microsoft.NET框架
1..NET框架由三部分组成:
·基类库(BCL)
·公共语言运行库(CLR, Common Language Runtime)
·编程工具
2.CLR(公共语言运行库)
是基于.NET框架的程序执行环境,CLR在程序运行期间管理程序的执行,包括以下内容:
·内存管理
·代码安全验证
·垃圾收集
3.编程工具
涵盖了编码和调试需要的一切,包括:
·Visual Studio集成开发环境
·.NET兼容的编译器(例如: C#、VB、JScript和托管的C++)
·调试器
·服务器端改进,比如ASP.NET
4.BCL(基类库)
是.NET框架使用的一个大的类库,而且也可以在你的程序中使用.
二.编程环境的改进
较之以前的Windows编程环境,.NET框架为程序员带来了相当答的改进:
1.面向对象的开发环境
CLR、BCL和C#被设计的完全面向对象,并形成良好的集成环境。
2.自动垃圾收集
CLR的一项服务,GC(Garbage Collector,垃圾收集),自动管理内存.
·GC自动从内存中删除程序不再访问的对象.
·GC使程序员不在操心许多以前必须执行的任务,比如释放内存和检查内存泄漏.
3.互操作性
.NET框架的设计专门考虑了不同的.NET语言、操作系统或Win32 DLL和COM之间的互操作性.
·允许在用不同的.NET语言编写的软件模块间无缝地交互.
·一种.NET语言写的程序可以使用甚至继承用另一种.NET语言写的类,只需要遵循一定的规则即可
·正因为它能够很容易地集成不同编程语言生成的模块,.NET框架有时被称为语言无关的.
·平台调用(platform invoke,P/Invoke)的特性,允许.NET的代码调用并使用非.NET的,但通过标准Win32 DLL导出的纯C函数的代码,比如Windows API.
·允许与COM的互操作
4.不需要COM
摆脱了COM的束缚,因而也不需要下面的内容
·IUnknown接口: 在COM中,所有对象必须实现IUnknows接口,相反,所有.NET对象都继承一个名为object的类,接口编程仍是.NET中的一个重要部分,但不再是中心主题了.
·类型库: 在COM中,类型信息保存在类型库中当作.tlb文件,它和可执行代码是分开的.在.NET中,程序的类型信息和代码一起被保存在程序文件中.
·引用计数: 在COM中,程序员必须记录一个对象的引用数目以确保它不会在错误的时间被删除,在.NET中,GC记录引用情况并只在合适的时候删除对象.
·HRESULT: COM使用HRESULT数据类型返回运行时错误代码,.NET不使用HRESULT.相反,所有意外的运行时错误都产生异常.
·注册表: COM应用必须在系统注册表中注册,注册表保存了与操作系统的配置和应用程序有关的信息,.NET应用不使用注册表,这简化了程序的安装和卸载,(但有类似的东西称为全局程序集缓存,即GAC).
5.简化的部署
部署为.NET框架编写的程序比以前容易很多,几点原因:
·不需要注册表注册
·并行执行特性,允许一个DLL的不同版本在同一台机器上存在,这意味着每个可执行程序都可以访问程序生成时使用的那个版本的DLL.
6.类型的安全性
CLR检查并确保参数及其他数据对象的类型安全,即使是在不同编程语言编写的组件之间.
7.基类库
.NET框架提供了一个广泛的基础类库,很自然地,它被称为基类库(Base Class Library,BCL),在写自己的程序时,可以使用这些丰富的代码,包括以下一些类:
·通用基础类: 这些类提供了一组极位强大的工具,可以应用到广泛的编程任务中,比如字符串操作、安全和加密。
·集合类: 实现了列表、字典、散列表以及位数组。
·线程和同步类: 用于创建多线程程序。
·XML类: 用于创建、读取以及操作XML文档。
三.编译代码
1.编译成CIL(Common Intermediate Languate,公共中间语言)
.NET语言的编译器接受源代码文件,并生成名为程序集的输出文件,程序集可以是可执行文件或DLL.
·程序集里的代码并不是本机代码,而是一种名称为CIL的中间语言.
·程序集包含的信息中,包括下列项目:
·程序的CIL.
·程序中使用的类型的元数据.
·对其他程序集引用的元数据.
2.编译成本机代码并执行
程序的CIL直到它被调用运行时才会被编译成本机代码,在运行时,CLR执行下面的步骤:
·检查程序集的安全特性
·在内存中分配空间
·把程序集中的可执行代码发送给实时(Just In Time,JIT)编译器,把其中的一部分编译成本机代码.
程序集中的可执行代码在需要的时候由JIT编译器编译,然后它就被缓存以备在后来的程序中执行,使用这个方法意味着不被调用的代码不会被编译成本机代码,而且被调用到的代码只被编译一次.
一旦CIL被编译成本机代码,CLR就在它运行时管理它,执行像释放无主内存、检查数组边界、检查参数类型和管理异常之类的任务,这有两个重要术语:
·托管代码: 为.NET框架编写的代码称为托管代码(managed code),需要CLR。
·非托管代码: 不在CLR控制之下运行的代码,比如Win32 C/C++ DLL,称为非托管代码.
微软公司还提供了一个称为本机映像生成器或Ngen的工具,可以把一个程序集转换成当前处理器的本机代码。经过Ngen处理过的代码免除了运行时的编译过程.
四.CLI(Common Language Infrastructure,公共语言基础结构)
每种编程语言都有一组内置的类型,用来表示如整数、浮点数和字符等之类的对象。在历史上,这些类型的特征在编程语言之间和平台之间都不同。例如,组成整数的位数在不同的语言和平台之间有很大差别。
然而,这种统一性的缺乏使我们难以让程序和其他使用不同语言编写的程序及库一起良好协作,为了有序和协作,必须有一组标准.
CLI(Common Language Infrastructure,公共语言基础结构)就是这样一组标准,它把所有.NET框架的组件连接成一个内聚的、一致的系统。它展示了系统的概念和架构,并详细说明了所有软件都必须坚持的规则和约定.
CLI的组成部分:
·公共语言运行库(CLR)
·基类库(BCL)
·公共类型系统(Common Type System,CTS)
CTS定义了在托管代码中一定会使用的类型的特征,CTS的重要方面如下:
·CTS定义了一组丰富的内置类型,以及每种类型确定的、详细的特性.
·.NET兼容编程语言提供的类型通常映射到CTS中已定义的内置类型集的某一个特殊子集.
·CTS最重要的特征之一是所有类型都继承自公共的基类--object.
·公共语言规范(Common Language Specification,CLS)
CLS详细说明了一个.NET兼容编程语言的规则、属性和行为.其主题包括数据类型、类结构和参数传递。
·元数据定义及语义
·公共中间语言(CIL)指令组
五.一个简单的C#程序
// SimpleProgram.cs
using System; //应用System命名空间,此命名空间包含Console类的方法WriteLine.
namespace Simple; //程序命名空间
{
class Program //声明一个类类型,名称为Program
{
static void Main() //声明一个名称为Main的方法作为类Program的成员, Main: 是一个特殊函数,作为程序的起始点.
{
Console.WriteLine("Hi there!") //方法体,使用System命名空间Console类的方法WriteLine打印输出文字.
}
}
}
编译这个程序:
csc SimpleProgram.cs