【C#与.NET程序设计】(1)- .NET

首先要厘清语言、框架和架构的区别:

  • 语言包含 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.ByteBytebyteunsigned char
System.SByteSBytesbytesigned char
System.Int16Shortshortshort
System.Int32Integerintint或long
System.Int64Longlong__int64
System.UInt16UShortushortunsigned short
System.UInt32UIntegeruintunsigned int或unsigned long
System.UInt64ULongulongunsigned __int64
System.SingleSinglefloatFloat
System.DoubleDoubledoubleDouble
System.ObjectObjectobjectobject^
System.CharCharcharwchar_t
System.StringStringstringString^
System.DecimalDecimaldecimalDecimal
System.BooleanBooleanboolBool

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版)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值