【C#与.NET程序设计】(1)- .NET
来源:互联网 发布:工口mmd动作数据 编辑:程序博客网 时间:2024/05/17 06:16
首先要厘清语言、框架和架构的区别:
- 语言包含 C/C++、Visual Basic 6、Java、C# 等
- 框架包含 MFC、ATL、STL、.NET 等
- 架构包含 COM、CORBA、EJB 等
在.NET之前,windows的软件开发从原始到先进的工具依次为:C/Windows API、C++/MFC、VB6.0、Java、COM
而.NET以一种激进的方式提高了软件开发的效率(并且支持跨平台)
.NET架构
如图1所示,总的来说.NET包含运行库环境(CLR)和基础类库(BCL)这两个模块;其中CLR又包含公共类型系统(CTS)和公共语言规范(CLS)两块
图1. .NET架构
- 基础类库BCL:适用于全部.NET语言,封装了各种基本类型(线程、文件I/O、图形绘制、外部硬件交互等)
- 运行库CLR:定位、加载和管理.NET类型;负责底层工作(内存管理、应用托管、处理线程、安全检查等)
- 公共类型系统CTS:描述了运行库CLR所支持的所有可能数据类型和编程结构;支持.NET的某个特定语言(如C#)可能不支持CTS所定义的全部特性
- 公共语言规范CLS:定义了一个让所有.NET语言都支持的公共类型和编程结构的子集
.NET程序集
.NET语言生成的二进制文件(windows下)与COM和非托管二进制文件一样,都是 .dll 或 .exe,但内部是完全不同的
一个程序集一般只对应一个二进制文件,但也可以将多个二进制文件视为模块,统一为一个程序集
一个程序集包含3部分:微软中间语言(CIL)、元数据、清单
- CIL:所有的.NET语言编译器都会讲源码编译为CIL(平台无关的语言),在使用时再即时编译(使用JIT)为某特定平台的指令。CIL的意义在于实现了语言的集成性和平台无关性
- 元数据:描述每一个二进制文件中定义的类型(类、结构、枚举等),每个类型的成员(属性、方法等)
- 清单:描述程序集本身的元数据(版本号、版权信息等)
CTS
公共语言规范CTS规定了类型必须如何定义才能够被CLR所承载
主要包含5种类型(类、接口、结构、枚举、委托)和一系列内建数据类型
类类型
每一种支持.NET的语言都必须支持
// C#类类型class Calc{ // public 表示可以被外部程序集使用 // internal 表示只能在本程序集使用 public int Add(int x, int y){ return x + y; }}
接口类型
由抽象成员定义所组成的一个具名集合
// C#接口类型// 通常被声明为公共的,这样其他程序集中的类型就可以实现其行为public interface IDraw{ void Draw();}
结构类型
// C#结构类型struct Point{ // 可以包含字段 public int xPos, yPos; // 可以包含参数化构造函数 public Point(int x, int y){ xPos = x; yPos = y; } // 可以定义方法 public void PrintPosition(){ Console.WriteLine("({0}, {1})", xPos, yPos); }}
枚举类型
// C#枚举类型enum CharacterType{ Wizard = 100, Fighter= 200, Thief = 300}
委托类型
等效于类型安全的C风格的函数指针,但他是派生自 System.MulticastDelegate,而不是一个简单的指向原始内存地址的指针
// C#委托类型delegate int BinaryOp(int x, int y);
内建的数据类型
均在mscorlib.dll 被定义
CLS
公共语言规范CLS清晰的描述了支持.NET的编译器必须支持的最小的和完全的特征集,以便于被基于.NET平台的其他语言用统一的方式进行访问
图2. .NET源代码、编译器和执行器的工作流
其他
- .NET没有提供特定语言的代码库,通过命名空间的概念确保基础类库中所有类型能良好组织
using System; //通用基础类库类型using System.Drawing; //图形呈现类型using System.Windows.Forms; //GUI窗口部件类型using System.Data; //通用以数据为中心的类型using System.Data.SqlClient; //MS SQL Server 数据访问类型
- 机器需要安装.NET环境才能运行
参考
【1】C#与.NET 4高级程序设计(第5版)
- 【C#与.NET程序设计】(1)- .NET
- 【C#与.NET程序设计】(3)- C#基本参数类型
- 【C#与.NET程序设计】(4)- C#类及OOP
- 【C#与.NET程序设计】(7)- C#泛型、委托
- 【C#与.NET程序设计】(8)- C#事件、Lambda
- 【C#与.NET程序设计】(5)- C#OOP
- [连载]C#程序设计(01)--- .NET概述
- 1-.net与C#
- 【C#与.NET程序设计】(2)- C#基本数据类型及控制结构
- 【C#与.NET程序设计】(6)- C#垃圾回收及接口类型
- C#与.NET 3.0高级程序设计(特别版)问题与错误列表
- C#与.NET 3.0高级程序设计(特别版)问题与错误列表
- C#与.NET.3.5高级程序设计(第4版) 读后感
- C#与.NET 4高级程序设计:第5版
- .Net 框架程序设计(1)
- .NET精简框架程序设计:C#版
- .NET精简框架程序设计:C#版
- C#3.0与.NET
- mongodb根据objectid修改
- Fresco基本用法
- struts2使用AbstractInterceptor实现拦截器
- 浏览器默认的弹出框
- 背景色设置透明,兼容ie浏览器设置
- 【C#与.NET程序设计】(1)- .NET
- BIO NIO AIO
- 在eclipse导入项目如何将多个项目放入一个文件夹中
- poj 2709 painter 贪心 2017.10.10 模拟赛
- swfit3.0 两种方式获取post数据
- 《老罗的Android之旅》专栏目录
- 图片上传
- linux 安装 php5.6 集成 nginx
- startup_stm32f40xx.s: error: A3906U: Malformed via file '.\debug\startup_stm32f40xx._ia'.