【C#与.NET程序设计】(1)- .NET
程序员文章站
2024-03-13 10:39:33
...
首先要厘清语言、框架和架构的区别:
- 语言包含 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 被定义
CTS数据类型 | VB.NET关键字 | C#关键字 | C++/CLI关键字 |
---|---|---|---|
System.Byte | Byte | byte | unsigned char |
System.SByte | SByte | sbyte | signed char |
System.Int16 | Short | short | short |
System.Int32 | Integer | int | int或long |
System.Int64 | Long | long | __int64 |
System.UInt16 | UShort | ushort | unsigned short |
System.UInt32 | UInteger | uint | unsigned int或unsigned long |
System.UInt64 | ULong | ulong | unsigned __int64 |
System.Single | Single | float | Float |
System.Double | Double | double | Double |
System.Object | Object | object | object^ |
System.Char | Char | char | wchar_t |
System.String | String | string | String^ |
System.Decimal | Decimal | decimal | Decimal |
System.Boolean | Boolean | bool | Bool |
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
-
Java 和 Javascript 的 Date 与 .Net 的 DateTime 之间的相互转换
-
Java 和 Javascript 的 Date 与 .Net 的 DateTime 之间的相互转换
-
asp.net 程序性能优化的七个方面 (c#(或vb.net)程序改进)
-
使用.NET命令行编译器编译项目(如ASP.NET、C#等)
-
asp.net 程序优化精选第1/2页
-
asp.net 面试+笔试题目第1/2页
-
关于.net(C#)中的跨进程访问的问题
-
ASP.NET 动态写入服务器端控件第1/2页
-
asp.net 继承自Page实现统一页面验证与错误处理