欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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)两块

          【C#与.NET程序设计】(1)- .NET
                          图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平台的其他语言用统一的方式进行访问

              【C#与.NET程序设计】(1)- .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版)