前言

COM:组件对象模型(Component Object Model COM)源自对象链接和嵌入(Object Linking and Embedding )OLE。

DCOM:(Distributed COM)分布式组件对象模型

COM:几乎是左右组件通信方式的基础,实现了事物处理,消息传输服务,和对象池。

Windows上的软件的通信几乎都是用COM实现。

.NET能够提供现有COM组件包装器(wrapper),以便.NET组件之间的通信。

.NET的优点

1. 面向对象编程

2. 优秀的设计

3. 语言无关性

4. 动态Web页面更好的支持

5. 高效的数据访问

6. 代码共享

7. 增强的安全性

8. 对安装没有任何影响

9. web服务的支持

C#的优点

1.完全支持类和面向对象编程,包括接口和实现继承、虚函数和运算符重载

2.一致且定义完善的基本类型集

3.对自动生成xml档的内置支持

4.自动清理动态分配的内存

5.可以用用户定义的属性来标记类或方法。这可以用于文档,

6.可以完全访问.net基类库,并易于访问Windows API

7.可以使用指针和直接访问内存,但c#言可以在没有它们的条件下访问内存

8.改变编译器选项,可以把程序编译为可执行文件或..net组件库,该组件库可以用与Am、α

9.控件COM组件)相同的方式由其他代码调用。

10.C#可以用于编写asp.net动态Web页面和XML Web服务。

第一章.NET的体系结构

1.1 C#与.NET的关系

l C#是一种开发语言

l .net是一种开发平台

1.2 公共语言运行库

.NET FrameWork核心是其运行库的执行环境称为公共语言运行库(CRL)或者.NET运行库 ,通常把在CRL控制下的代码称为托管代码

CRL在执行编写好的源代码之前需要编译他们

在.NET中编译分为两个阶段:

1.把源代码翻译中微软的中间语言(IL)

2.CRL把微软中间语言(IL)翻译成平台语言

微软中间语言实现:平台无关性,提高性能,语言的互操作性。

平台无关性

.NET的平台无关性参考:(http://www.go-mono.com)

提高性能

IL和java字节码比较IL比java字节码的作用还要大IL总是即时编译(JIT编译)

JIT编译并不是一次把应用程序编译完(这样会有很长的启用时间)而是之编译他调用的那部分代码(这是其名称由来)代码编译以后得到一个本地的应用程序存储起来知道退出该应用程序为止。这样下次运行时就不需要重新编译了。

JIT编译器确切的知道程序运行在什么样的处理器上,可以利用该处理器提供的任何特性或者特定的机器代码指令来优化最后的可执行代码。

语言互操作性

任何一种语言编译为中间语言,编译为中间语言的代码可以从其它语言编译过来的代码进行交互操作。

1.3中间语言

面向.net的所有语言在逻辑上都需要支持IL的主要特性。

中间语言的特性:

面向对象使用接口

值类型和应用类型之间的显著差异

强数据类型化

使用异常来处理错误

使用特性

面向对象使用接口的支持

类的单一继承性

提供一个契约,实现给定接口的类必须提供该接口制定的方法和属性的实现方式。

重要的是组件仅能通过COM运行库与其他组件同行使用不同语言的组件无法通过COM直接彼此通信或者创建彼此实例——系统总将COM作为中间件。

COM体系结构还不允许利用继承实现,即,丧失面向对象编程的许多优势。

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

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

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

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

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

不同的值类型和应用类型

值类型:变量直接存储其数据。

应用类型:仅存储地址,对应的数据可以在改地址中找到。

强化数据类型

l 语言的互操作性。

l 垃圾收集

l 安全性

l 应用程序域

通用类型系统(CTS)

CTS不仅制定了基本数据类型,还定义了一个 内容丰富的类型层次结构

C#中,编译器识别的每个预定义类型都映射为一个IL内置类型。

公共语言规范(CLS)

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

公共语言规范(CLS)的两种工作方式

l 各个编译器的功能不必强大到支持.net的所有功能,这将鼓励人们为其它面向.net的编程语言开发编译器。

l 如果限制类只能使用CLS兼容特性,就要保证用其它兼容语言编写的代码可以使用这个类。

垃圾回收器

垃圾回收器用来在.net中进行内存管理

Windows平台己经使用了两种技术来释放进程向系统动态请求的内存:

l 完全以手工方式使应用程序代码完成这些工作。

l 让对象维护引用计数。

安全性

.net提供了基于代码的安全性

Windows提供了基于用户角色的安全性

应用程序域

应用程序域是.NET中的一个重要技术改进,它用于减少运行应用程序的系统开销,这些应用程序需要与其他程序分离开来,但仍需要彼此通信

应用程序域(application domain)是分离组件的一种方式,它不会导致因在进程之间传送数据而产

生的性能问题。其方法是把任何一个进程分解到多个应用程序域中。每个应用程序域大致对应一个

应用程序,执行的每个线程都运行在一个具体的应用程序域中,如图⒈3所示

通过异常处理错误

异常结构确保在发生错误情况时,执行进程立即跳到最有针对性的异常处理例程上,来处理错

误情况。

特性的使用

是为了在程序中提供与某些项相关的额外信息,以供编译器使用。

程序集

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

程序集完全是自描述的是一个逻辑单元而非物理单元,可以存储在多个文件中(动态程序集的确存储在内存中而不是存储在文件中)如果一个程序存储在多个文件中,其中就会有一个包含入口点的主文件,该文件描述程序集中的其他文件。

可执行代码和库代码使用相同的程序集结构。唯一的区别是可执行的程序集包含一个主程序的入口点,而库程序不包含。

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

反射

因为程序集中包含了元数据,包含在程序集中定义的所有类型和这些类型的成员细节,所以可以变成访问这些元数据这个技术称为反射。(常用于获取特性的详细信息,也可以吧反射用于其它目的)

并行编程:应该考虑竞态条件和锁。

名称空间

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

Asp.net的功能:

Asp.net页面是结构化的,即每个页面都继承了.NET类 System.Web.UI.Page的类

XML服务

公司选择XML服务的原因:

XML服务依赖于http,而XMLWeb服务可以把现有的网络Http用作传输信息的媒介

XML Web服务使用XML 该数据格式是自描述的,非专用的独立于平台。

WPF

要运行WPF应用程序,需要在客户机上安装.NET FramewOrk3,0、3,5或4。

小结

前言和第一章.NET的体系结构的更多相关文章

  1. C#高级编程 (第六版) 学习 第一章:.Net体系结构

    第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...

  2. C#高级编程笔记之第一章:.NET体系结构

    1.1 C#与.NET的关系 C#不能孤立地使用,必须与.NET Framework一起使用一起考虑. (1)C#的体系结构和方法论反映了.NET基础方法论. (2)多数情况下,C#的特定语言功能取决 ...

  3. 第一章 mysql的体系结构与存储引擎

    数据库从逻辑上可以分为两部分,一部分负责存储即文件系统,这部分有个更时髦的名字叫存储引擎,存储引擎负责如何把数据以及索引相关的内容以合适的形式组织并存储到磁盘上.另一部分为server部分,负责和用户 ...

  4. 【黑金原创教程】【Modelsim】【第一章】Modelsim仿真的扫盲文

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  5. c#高级编程第七版 学习笔记 第一章 .NET体系结构

    第一章      .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...

  6. Oracle学习笔记--第2章 oracle 数据库体系结构

    第2章 oracle 数据库体系结构 目录: ————————————— 2.1物理存储结构 2.1.1数据文件 2.2.2控制文件 2.1.3重做日志文件 2.1.4其他文件 2.2逻辑存储结构 2 ...

  7. 决胜Flutter 第一章 熟悉战场

    欢迎参加“决胜Flutter” 实训课程,这里是你此次实训之旅的起点. 本章将带您快速了解移动开发的现状,然后向您介绍Flutter的发展历史以及优势特点,最后一起动手,搭建高效的开发环境. 由于Fl ...

  8. [书籍翻译] 《JavaScript并发编程》第一章 JavaScript并发简介

    > 本文是我翻译<JavaScript Concurrency>书籍的第一章,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并 ...

  9. Intel汇编语言程序设计学习-第一章 基本概念

    第一章基本概念 1.1  简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...

随机推荐

  1. How to show only next line after the matched one?

    awk '/blah/{getline; print}' logfile

  2. [POI2013]Tower Defense Game

    题目大意: 一个$n(n\le5\times10^5)$个点$m(m\le10^6)$条边的无向图,边权全为$1$,满足若一个标记点能覆盖与其距离不超过$1$的点,从中选取不超过$k$个点能将整张图覆 ...

  3. openresty的lua_package_path

    文档 lua_package_path可以配置openresty的文件寻址路径.官网文档如下: # 设置纯 Lua 扩展库的搜寻路径(';;' 是默认路径): lua_package_path '/f ...

  4. C语言基础之指针

    1.指针的定义 格式:变量类型 *变量名; 1: // 定义了一个指针变量p 2: // 指针变量只能存储地址 3: // 指针就一个作用:能够根据一个地址值,访问对应的存储空间 4: // 指针变量 ...

  5. IOS调用WCF提供的服务方法,但是方法的参数是WCF那边自定义的对象,这样有办法调用么,如果可以IOS应该怎么传参呢?请问有了解的么,

    最近做一个项目后端使用WCF接收Android手机拍照并带其它参数保存到服务器里:刚好把最近学习的WCF利用上,本以为是个比较简单的功能应该很好实现,没想到其中碰到不少问题,在网上搜索很久一直没有想到 ...

  6. CSDN日报20170413 ——《天天写业务代码的那些年,我们是怎样成长过来的》

    [程序人生]天天写业务代码的那些年,我们是怎样成长过来的 作者:Phodal 比起写业务代码更不幸的是,主要工作是修 Bug , bug , buG , bUg. [Java 编程]Springboo ...

  7. tar命令解压缩出错

    [root@zhoucentos share1]# tar zxvf otp_src_19..tar.gz gzip: stdin: not in gzip format tar: Child ret ...

  8. Node.js的静态页面想通过jQuery的Ajax函数调用远程服务的措施无效

    程序下载:https://files.cnblogs.com/files/xiandedanteng/nodejsMakejqueryAjaxInvalid.rar 在 http://www.cnbl ...

  9. vscode - 安装离线插件

    打开网站(示例): https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow 下载扩展 vscode 安装离 ...

  10. Android学习(十) SQLite 基于内置函数的操作方式

    main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...