.NET基础概念

1 什么是CTS、CLS和CLR
2 开发和运行.NET程序需要的最基本环节是什么
3 .NET是否支持多编程语言开发
4 CLR技术和COM技术的比较
5 什么是程序集和应用程序域

1 什么是CTS、CLS和CLR

缩写的全称:
     CTS是通用类型系统(Common Type System)

CLS是公共语言规范(Common Language Specification)

CLR是公共语言运行时(Common Language Runtime)

所有类型都可以在 CTS中声明。CTS定义了一组语言编译器必须遵循的规则,以定义、引用、使用和存储引用类型和值类型。因此,遵循CTS,在不同语言中编写的对象才能彼此交互。但并不是所有的类型都可以用于所有的语言。要建立可以在所有.NET语言中访问的组件,就要使用CLS。有了CLS,编译器就可以根据CLS检查代码是否有效。

任何支持.NET的语言都不仅仅局限于CLS定义的公共功能子集。甚至有了.NET,仍可以创建不能在不同语言中使用的组件。这就是说,利用.NET支持所有的语言比利用COM简单得多。如果把自己限制在CLS之内,就可以保证组件可以在所有的语言中使用。第三方编写的库很可能限制在CLS之内,以确保该库可以在所有的语言中使用。

.NET Framework是为了支持多种语言而设计的。在设计.NET的阶段中,Microsoft让许多编译器开发商建立它们自己的.NET语言。Microsoft自己就发布了VB.NET、Managed C++、C#、J#和JScript.NET。另外,不同开发商开发了40多种语言,例如Cobol、Smalltalk、Perl和 Eiffel。每种语言都有其特有的优点和许多不同的功能。这些语言的编译器都进行了扩展,以支持.NET。

提示:
      CLS是一种语言必须支持的最小规范要求。如果把公共方法限制为CLS,那么支持.NET的所有语言就都可以使用我们的类!

在.NET Framework中,几乎所有(但不是所有)的类都是与CLS兼容的。在MSDN文档说明中,不兼容的类和方法都被特别标记为不兼容,例如System命名空间中的UInt32结构。UInt32表示32位无符号整数。并不是所有的语言(例如Visual Basic.NET或J#)都支持无符号的数据类型,这种数据类型是与CLS不兼容的。

  CLR是一个包含运行.NET程序的引擎和一堆符合公共语言基础结构的类库的集合。CLR是一个规范的实现,几乎所有的.NET程序都基于CLR的类库来实现,并且运行在CLR提供的运行引擎之上。所谓的.NET框架,指的就是公共语言运行库。

2 开发和运行.NET程序需要的最基本环境是什么

开发.NET程序需要一个文本编辑器和一个针对编码语言的编译器,对于C#来说,最常用的编译器是csc.exe。而运行.NET程序,需要的是安装.NET Framework组件。 Visual Studio作为IDE并不是必须的。

3 .NET是否支持多编程语言开发

.NET支持多编程语言的开发,但所有设计必须符合CLS规范以保证编程语言之间的特性差异不会产生运行时的差异。

4 CLR技术和COM技术的比较

COM技术已经没落了。CLR和COM都定义了组件间交互的规范。COM并没有定义如何描述组件间的依赖性,而且由于其严格的物理约定,造成了很多组件版本升级和控制的问题。CLR运用元数据和逻辑类型定义等机制,有效地解决了COM遗留的一些问题。CLR更容易理解和学习。

5 什么是程序集和应用程序域

程序集(Assembly)是一个或多个模块和资源文件的集合。当一个程序集被打包形成时,它不仅仅包含所有的原始文件内容,也会添加一个程序集清单,该清单包含了程序集的版本号、语言、发布者、导入类型等信息。程序集清单可以被添加到程序集的某个文件上,编译器也可以为程序集清单创建一个单独的文件。

程序集概念的引用给系统带来了很大的灵活性。

1)程序集支持多编程语言开发,就是一个程序集可以包含由不同编程语言定义和实现的模块。在程序集被编译形成时,所有这些类型已经被编译成中间代码,而不再带有原来编程语言的特性。

2)程序集运行逻辑分布和物理分布分离。这样虽然同属于一个逻辑程序集,各种类型和资源仍然可用分布在不同的物理文件里。这大大提高了系统部署的灵活性。例如,程序员可以把某个程序集分成4个文件,分别包含基本类型定义、基本HELP文档、可选类型定义和可选HELP文档。这样部署该系统时,可以让用户选择需要的功能,并且按照用户的选择从服务器下载必要的文件来组成程序集。

包含了程序集清单的那个文件对使用该程序集来说是必须的。

程序集是一个逻辑上的概念,而不是指一个或几个物理文件或者代码段。

在操作系统中,一个普通的应用程序通常占据一个操作系统的进程。操作系统的进程为应用程序提供了独立的内存空间,规定了代码的执行范围,并且提供了错误隔离机制。在.NET框架中,应用程序域(APPDomain) 提供了和操作系统进程非常类似的功能。一个在CLR中运行的应用程序,至少拥有一个应用程序域。和操作系统的进程相同,应用程序提供了代码的执行范围,并且为程序提供隔离。在多个应用程序域间通信是非常困难的,每个类型实例都会存放在一个应用程序域内,并且,所有域内的引用必须引用自己所在应用程序域的对象。

和操作系统不同的是,应用程序域的创建和销毁所需要的开销会相对较小。当然,CLR仍然在操作系统上运行,所以某个应用程序域必定运行在某个系统的进程内,在CLR的安排下,每个操作系统的进程可以包含多个应用程序域。

程序集(Assembly)是一个由类型定义、数据文件和资源文件组成的逻辑集合。每个程序集都包含一个程序集清单,该清单通常被附加在某个文件头上,也可以单独建立一个文件来包含该清单。

应用程序域是CLR中提供代码运行范围、操作隔离和安全设置隔离的逻辑单元,功能类似于操作系统的进程。一个或多个应用程序域在一个操作系统中运行。应用程序域的创建和销毁所需的开销,相对于操作系统进程较小。但和操作系统进程一样,应用程序域之间的数据共享相当困难。

转载请注明出处:

作者:JesseLZJ
出处:http://jesselzj.cnblogs.com

.NET基础 (01).NET基础概念的更多相关文章

  1. 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点

    087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...

  2. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

  3. 018 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 12 数据类型转换的基本概念

    018 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 12 数据类型转换的基本概念 本文知识点:Java中的数据类型转换 类型转换 类型转换分类 2类,分别是: ...

  4. java基础学习05(面向对象基础01)

    面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...

  5. 可满足性模块理论(SMT)基础 - 01 - 自动机和斯皮尔伯格算术

    可满足性模块理论(SMT)基础 - 01 - 自动机和斯皮尔伯格算术 前言 如果,我们只给出一个数学问题的(比如一道数独题)约束条件,是否有程序可以自动求出一个解? 可满足性模理论(SMT - Sat ...

  6. 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字

    081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...

  7. 054 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 01 数组概述

    054 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 01 数组概述 本文知识点:数组概述 为什么要学习数组? 实际问题: 比如我们要对学生的成绩进行排序,一个班级 ...

  8. 045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围

    045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...

  9. 036 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 03 嵌套if结构

    036 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 03 嵌套if结构 本文知识点:Java中的嵌套if结构 什么是嵌套if结构? 概念: 嵌套if结构 ...

  10. 016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值

    016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值 本文知识点:字面值 关于字面值的概念,需要注意:很多地方,我们可能就把字面值 ...

随机推荐

  1. Oracle段高水位(HWM, high water mark)问题

    Oracle对表做全表扫描的时候 ,会扫描完HWM以下的数据块.如果某个表delete(delete操作不会降低高水位)了大量数据,那么这时对表做全表扫描就会做很多无用功,扫描了一大堆数据块,最后发现 ...

  2. 2.docker学习之linux安装

    Docker CE is supported on CentOS 7.3 64-bit. 说明docker只能安装在centOS7以上 [root@hadoop-bigdata01 ~]# yum i ...

  3. python开发_python中的函数定义

    下面是我做的几个用列: #python中的函数定义,使用和传参 def_str = '''\ python中的函数以如下形式声明: def 函数名称([参数1,参数2,参数3......]): 执行语 ...

  4. leetcode 数组array

    120. Triangle 给出一个三角形(数据数组),找出从上往下的最小路径和.每一步只能移动到下一行中的相邻结点上. 解法,自底向上 The idea is simple. Go from bot ...

  5. 03-23 MVC框架(以查询、删除为例)

    1.MVC的定义: MVC(Model-View-Controller,模型-视图-控制器)是用于将应用程序粉好吃呢过如下3个主要方面的体系结构模式: 模型(Model):一组类和业务规则,类用于描述 ...

  6. windows版mongodb不知道安装在哪儿

    情景还原: 从官网:点击打开链接 下载了 MongoDB-win32-x86_64-2.6.12-signed.msi文件后, 右键安装,各种Next后,没有选择路径,就安装结束了!! 任务管理器里面 ...

  7. Kafka如何保证数据不丢失

    Kafka如何保证数据不丢失 1.生产者数据的不丢失 kafka的ack机制:在kafka发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够被收到,其中状态有0,1,-1. 如果是 ...

  8. 【UVALive2965】Jurassic Remains

    题意 题意给定n个大写字母组成的字符串,选择尽量多的串,使得每个大写字母都能出现偶数次.n<=24,每个字符串中每个字母最多出现一次. 分析 这是训练指南上的一道中途相遇法的简单题,但是好像也能 ...

  9. MySQL多表查询回顾

    ----------------------siwuxie095 MySQL 多表查询回顾 以客户和联系人为例(一对多) 1.内连接 /*内连接写法一*/ select * from t_custom ...

  10. Spring学习笔记(三)--Convert System设计

    一.概述 转换系统是不同范式系统间交互常常会需要碰到的,如WEB 中HTTP KV文本流到对象的转换和对象到http KV文本流的转换:还有对象到关系型DB和关系型DB到对象之间的转换(ORM). 一 ...