C#语言 第一章 .NET体系结构

一.C#与.NET

1.C#编程语言的重要性:

   1)它是专门为Microsoft的.NET Framework 一起使用而设计的(.NET Framework是一个功能非常丰富的平台,可开发、部署和执行分布式应用程序)

   2)它是一种基于现代面向对象设计方法的语言

2.C#与.NET的关系

 C#就其本身而言只是一种语言,尽管是用于生成面向.NET环境的代码,但是,它本身并不是.NET的一部分,(只不过C#语言和.NET一起使用),所以,.NET支持的一些特性,C#并不支持,而C#语言支持的另一些特性,.NET却不支持(如运算符重载)

二.公共语言运行库(Common Language Runtime简称CLR)

.NET Framework 的核心是其运行库执行环境,称为CLR或.NET运行库。通常将在CLR控制下运行的代码称为托管代码(managed code)

但在运行编写好的源代码之前需要进行编译,在.NET中编译的两个阶段为:

 1)把源代码编译为Microsoft中间语言(IL)

 2)CLR把IL编译为平台专用的代码

Microsoft中间语言是低级语言,语法简单,可以非常快的转换为本地机器码,其优点为 :平台无关性,提高性能和语言的互操作性

三.中间语言(IL)

主要特征:

1)面向对象和使用接口

2)值类型和引用类型之间的显著差异

3)强数据类型化

4)使用异常来处理错误

5)使用特性(attribute)

解释主要特征:

1.面向对象和接口的支持

中间语言是面向对象的编程,带有类的单一继承性,且还引入了接口的概念。但实现指定的接口的类必须提供该接口指定的方法和属性的实现方式。

.NET和中间语言实现了语言互操作性。即

1)用一种语言编写的类能继承用另一种语言编写的类

2)一个类能包含另一个类的实例,而不管两个类是使用什么语言 编写的

3)一个对象能直接调用用其他语言编写的另一个对象的方法

4)对象(或对象的引用)应能在方法之间传递

5)在不同的语言之间调用方法时,能在调试器中交替调试这些方法调用,即调试不同语言编写的源代码

2.不同的值类型和引用类型

值类型(value type):变量直接存储其数据,

引用类型(reference type):变量仅存储地址,对应的数据可以在该地址中找到

有关其存储:

值类型一般存储在堆栈中(但如果值类型在引用类型中声明为字段,它们就内联存储在堆中)

引用类型的实例总是存储在一个名为“托管堆”的内存区域内

3.强数据类型化

中间语言的一个重要方面是它基于强数据类型化,所有变量都清晰地标记为属于某个特定数据类型。

从.NET提供的、依赖于类型安全的服务中获得的好处很多,这些服务包括:语言的互操作性、垃圾收集、安全性、应用程序域

在这里解释一下垃圾回收:

垃圾回收器(garbage collector)用来在.NET中进行内存管理,特别是它可以恢复正在运行的应用程序需要的内存。

.NET运行库清理内存的方式:所有动态请求的内存都分配到堆上(所有语言都是这样处理的,但是在.NET中,CLR维护它自己的托管堆,供.NET应用程序使用),每隔一段时间,当.NET检测到给定进程的托管堆已满,需要清理时,就调用垃圾回收器。垃圾回收器处理目前代码中所有的变量,检查对存储在托管堆上的对象的引用,确定哪些对象可以从代码中访问——即哪些对象有引用。没有引用的对象就不再认为可以从代码中访问,因而被删除。

之所以在.NET中使用垃圾回收器,是因为中间语言已用来处理进程。其规则要求,第一,不能引用已有的对象,除非复制已有的对象,第二,中间语言是类型安全的语言。在这里,其含义是如果存在对对象的任何引用,该引用中就有足够的信息来确定对象的类型。另一方面,它的不确定性,即不能保证什么时候会调用垃圾回收器:CLR决定需要它时,可以调用它,但也可以在代码中调用垃圾回收器,重写这个过程。

通过异常处理错误:

异常处理可以将包含异常情况的准确信息的对象传递给错误处理例程。这个对象包括给用户提供的相应信息和在代码的什么地方检测到错误的准确信息。

大多数异常处理结构,包括异常发生时的程序流控制,都是由高级语言处理的,例如C#,任何中间语言中的命令都不支持它,但是.NET提供了一种基础结构,让面向.NET的编译器支持异常处理。特别是它提供了一组.NET类来表示异常,语言的互操作性则允许异常处理代码解释被抛出的一场对象,无论异常处理代码使用什么语言编写,都是这样。语言的无关性没有体现在C++和Java的异常处理中,但在COM的错误处理机制中有一定限度的体现。COM的错误处理机制包括从方法中返回错误代码以及传递错误对象。在不同的语言中,异常的处理是一致的,只是促进多语言开发的重要一环。

四.程序集

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

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

私有程序集:一般附带在某个软件上,且只能用于该软件。附带私有程序集的常见情况是,以可执行文件或许多库的方式提供应用程序这些库包含的代码只能用于该应用程序。且系统可以保证私有 程序集不被其他软件使用。

共享程序集:是其他应用程序可以使用的公共库。

因此存在一定风险,1.名称冲突 ,另一个公司的共享程序集执行的类型与自己的共享程序集中的类型同名  2.程序集被同一个程序集的不同版本覆盖——新版本与某些已有的客户端代码不兼容。

解决方法:把共享程序集放在文件系统的一个特定的子目录树中,称为全局程序集缓存(GAC)。为了避免名称冲突,应根据密钥加密法为共享程序集指定一个名称(而对于私有程序集,只需要指定与其主文件名相同的名称即可),该名称称为强名,并保证其唯一性,它必须由要引用共享程序集的应用程序来引用。

五. .NET Framework类

.NET基类是一个内容丰富的托管代码类集合,它可以完成以前要通过Windows API来完成的绝大数任务。这些类沿用中间语言使用的对象模型,也基于单一继承类。可以从任何适用的.NET基类实例化对象,也可以从它们派生自己的类。

.NET基类的一个主要优点是它们非常直观和易用。

六.名称空间

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

名称空间是数据类型的一种组合方式,但名称空间中所有数据类型的名称都会自动加上该名称空间的名字作为其前缀。名称空间还可以相互嵌套。

.NET需要在名称空间中定义所有类型。

在大多数情况下,Microsoft建议都至少要提供两个嵌套的名称空间名,第一个是公司名,第二个是技术名称或软件包的名称,而类是其中的一个成员。

七.用C#创建.NET应用程序

C#可以用于创建控制台应用程序:仅使用文本、运行在DOS窗口中的应用程序。在进行单元测试类库、创建UNIX/Linux守护进程时,就要使用控制台应用程序。但是,我们常使用C#创建利用许多与.NET相关的技术的应用程序。

C#创建不同类型的应用程序:创建ASP.NET应用程序,创建Windows窗体,使用WPF,Windows控件,Windows服务,WCF,Windows WF




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值