《csharp高级编程》 学习笔记 第一章 .net 体系结构

原创 2011年10月02日 00:13:31
第一章 .net 体系结构

几个概念:
1.Microsoft Intermediate Language,MSIL或简称IL。
2.Common Type System,CTS通用类型系统。
3.Common Language Specification ,CLS 公共语言规范。
4..NET Framework 一个功能非常丰富的平台,可开发、部署和执行分布式应用程序。
5..NET Framework 的核心是其运行库的执行环境,称为公共语言运行库(CLR)或.NET 运行库。
6.通常将在CLR 的控制下运行的代码称为托管代码(managed code)。
7.JIT编译,即时编译。IL总是即时编译的。
1.1 c#与.net的关系
c#语言不能孤立使用,C#编译器专门用于.NET,这表示用C#编写的所有代码总是在.NET Framework 中运行。
在许多情况下,C#的特定语言功能取决于.NET 的功能,或依赖于.NET 基类。
*:有一个很重要的问题要弄明白:C#就其本身而言只是一种语言,尽管它是用于生成面向.NET 环境的代码,但它本身不是.NET 的一部分。.NET 支持的一些特性,C#并不支持。而C#语言支持的另一些特性,.NET 却不支持(例如运算符重载)!
1.2 公共语言运行库CLR
在.net中,编译分为两个阶段:
(1)把源代码编译为IL;
(2)CLR把IL编译为平台专用的代码。
这两个编译过程非常重要,因为托管代码是提供.net的许多优点的关键。
1.2.1 平台无关性
1.2.2 提高性能
因为JIT编译器能够针对处理器的硬件特性来优化代码。
1.2.3 语言的互操作性
使用IL 不仅支持平台无关性,还支持语言的互操作性。简而言之,就是能将任何一种语言编译为中间代码,编译好的代码可以与从其他语言编译过来的代码进行交互操作。
语言互操作性的真正含义:
● 用一种语言编写的类应能继承用另一种语言编写的类。
● 一个类应能包含另一个类的实例,而不管它们是使用什么语言编写的。
● 一个对象应能直接调用用其他语言编写的另一个对象的方法。
● 对象(或对象的引用)应能在方法之间传递。
● 在不同的语言之间调用方法时,应能在调试器中调试这些方法调用,即调试不同语言编写的源代码。

1.3 中间语言IL
主要特征:
● 面向对象和使用接口
● 值类型和引用类型之间的巨大差别
对于值类型,变量直接保存其数据,而对于引用类型,变量仅保存地址,从地址再去找数据。
IL也有数据存储的规范:
引用类型的实例总是存在名为"托管堆"的内存区域中,值类型一般存储堆栈中(但如果值类型在引用类型中声明为字段,就内敛存储在堆中)。在第二章会具体讨论。
● 强数据类型
含义:所有变量都清晰地标记为属于某个特定数据类型。
特别是IL一般不允许对模糊的数据类型执行任何操作。
比如:c++中不同类型之间转换指针类型,这类提高性能但破坏类型的安全性的行为,只能在某些编译为托管代码的语言中的特殊情况下进行。

虽然这样强迫实现类型的安全性最初会降低性能。
但可以从.net提供的,依赖于类型安全的服务中获得的好处更多。这些服务包括。
a.语言的互操作性。
b.垃圾收集
c.安全性
d.应用程序域
1.语言互操作性中强数据类型的重要性
(1)通用类型系统CTS
CTS定义了可以在IL中使用的预定义数据类型,所有面向.net framework的语言都可以生成最终基于这些类型的编译代码。
在c#中,编译器将识别的每个预定义类型都映射为一个IL内置类型。
(2)公共语言规范CLS(common language specification)
和CTS一起确保语言的互操作性。
CLS是一个最低标准集,所有面向.NET的编译器都必须支持它。

注意:
编写非CLS兼容代码是完全可以接受的,只是在编写了这种代码后,就不能保证编译好的IL代码完全支持语言的互操作性。

CLS的两种工作方式:
首先是各个编译器的功能不必强大到支持.net的所有功能。
第二是提供如下保证:
如果限制类只能使用CLS兼容的特性,就要保证用其他兼容语言编写的代码可以使用这个类。(这里不是很懂)

在一般情况下,CLS对c#代码的影响不会太大,因为c#中的非CLS兼容特性非常少。

2.垃圾收集
windows平台使用两种技术来释放进程向系统动态请求的内存:
*完全以手工方式使应用程序代码完成这些工作。(c++语言的delete)
*让对象维护引用计数(这个东西在c++primer里面说过)(COM组件的方式)

.NET采用垃圾收集器。它是一个程序。
原理略。
它的一个重要方面是不确定性。
即不能保证什么时候会调用垃圾收集器。
.NET运行库决定需要它时,就调用它(除非明确调用垃圾收集器)。但可以重写这个过程,在代码中调用垃圾收集器。

3.安全性
.NET提供的安全机制是基于代码的安全性。windows仅提供基于角色的安全性,其建立在运行进程的账户的身份基础上,换而言之,就是谁拥有和运行进程。

4.应用程序域

● 使用异常来处理错误
详见第14章
● 使用特性(attribute)
详见第13章

1.4 程序集(assembly)
定义:包含编译好的,面向.NET framework的代码的逻辑单元,详细会在17章中论述。

1.5 .NET framework类
编写托管代码的最大好处是可以使用.NET基类库。
.NET基类是一个内容丰富的托管代码类集合,它可以完成以前要通过windows api来完成的绝大多数任务。

1.6 命名空间
命名空间是.NET避免类名冲突的一种方式。
命名空间不过是数据类型的一种组合方式,但命名空间中所有数据类型的名称都会自动加上该命名空间的名字作为前缀。
命名空间可以相互嵌套(例如System.Array)。
注意:
如果没有显示提供命名空间,类型就添加到一个没有名称的全局命名空间中。
1.7 用csharp创建.NET应用程序
● 创建ASP.NET应用程序
ASP(active server page)是用于创建带有动态内容的web页面的一种microsoft技术。
是客户建立基于浏览器的应用程序的一种便利方式。
● 创建windows窗体
windows form项目编译为.EXE,该EXE必须与.NET运行库一起安装在最终用户的计算机上。
第31章详细介绍。
● 使用windows presentation foundation(WPF)
这是一种很新的技术。WPF在建立应用程序时使用xaml(可扩展的应用程序标记语言)。
xaml是用于创建窗体的xml声明,它代表wpf应用程序的所有可视化部分和操作。
wpf是迈向声明性编程的一步,而声明性编程是编程业的趋势。
声明性编程是指,不是利用编译语言来创建对象,而是通过xml类型的编程来声明所有的元素。
● windows控件
web窗体和windows窗体开发方式一样,但添加的控件类型不同。
● windows服务
● windows communication foundation(WCF)

1.8 csharp在.NET企业体系结构中的作用

第一章 .NET体系结构

这一章主要是介绍.NET的整个体系,说明.NET是什么,有什么用。下面就通过这两个方面进行介绍: 一、.NET是什么 定义:.NET Framework的核心是其运行库执行环境,称为公共语言运行库...
  • a_asdfgh
  • a_asdfgh
  • 2017年10月29日 10:25
  • 84

《csharp高级编程》 学习笔记 第五章 数组

第五章 数组 5.1  简单数组 5.1.1 数组的声明 int [] myArray; 5.1.2 数组的初始化 myArray=new int [4]; int[] m...
  • wuyanyi
  • wuyanyi
  • 2011年10月05日 20:20
  • 3623

C Sharp与.net学习笔记(二)

看看动态库创建与使用相关的东西 生成与使用(托管的)dll dll.cs ==> dll.dll // file: dll.cs public class Calc ...
  • dbzhang800
  • dbzhang800
  • 2012年01月16日 04:13
  • 3659

Windows高级编程学习笔记(一)

写在前面的话 之前学的Windows编程都是界面啊、网络编程啊之类的纯应用层面的东西,总是感觉而自己没有达到自己期望中的水平。什么水平?让你写个监控系统资源的工具,或者DLL注入啊之类的,或者底层安全...
  • u012790503
  • u012790503
  • 2016年08月27日 18:09
  • 369

《C#高级编程》读书笔记

本文已同步发表在博客园:http://www.cnblogs.com/davidsheh/p/5236686.htmlC#类型的取值范围 访问限制符 修饰符 应用于 说明 public ...
  • wenxin2011
  • wenxin2011
  • 2016年03月03日 18:50
  • 559

《csharp高级编程》 学习笔记 第二章 csharp基础

第二章 csharp基础 2.3.1 变量的初始化 对于变量的初始化c#的编译器更加严厉。大多数现代编译器把没有初始化标记为警告,但csharp编译器会标记为错误。 csharp有两个确保变量在...
  • wuyanyi
  • wuyanyi
  • 2011年10月02日 16:58
  • 871

PMP学习笔记之第一章引论

什么是项目 定义: 项目是为创造独特的产品、服务或成果而进行的临时性工作   对独特性的理解:     对临时性的理解: 指项目有明确的起点和终点   作用: 项目可以创造一个产品,可能是其他产品的组...
  • zzc125
  • zzc125
  • 2016年11月01日 00:19
  • 432

《C#高级编程(第7版)》学习笔记

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: -Markdown和扩展Markdown简洁的语法 - 代码块高...
  • onlytiger1100
  • onlytiger1100
  • 2017年03月10日 09:12
  • 277

ORACLE SQL高级编程第三章学习笔记

本章讲述了RQACLE里的访问和连接方法 一、全表扫描访问方法       1.全表扫描就是获取表中所有数据块,再根据条件进行过滤                  # 是否使用全表扫描与所要获取的数...
  • m1101322632
  • m1101322632
  • 2013年10月20日 11:56
  • 377

C#2005 .NET3.0高级编程学习笔记———.NET体系结构

    C#是一种全新的编程语言,它是为了与Windows的.NET Framework一起使用而被设计出来的,是一种基于现代面向对象设计方法的语言,吸取了其他类似语言的经验。它本身只是一种语言,并不...
  • vista009
  • vista009
  • 2008年01月28日 10:47
  • 413
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《csharp高级编程》 学习笔记 第一章 .net 体系结构
举报原因:
原因补充:

(最多只允许输入30个字)