Introduction of .NET

.NET

.NET 简介

.NET 是微软用来实现 XML, Web Services, SOA(面向服务的体系结构 Service-Oriented Architecture)和敏捷性的技术。它是微软的新一代技术平台,为敏捷商务构建互联互通的应用系统,这些系统是基于标准的,联通的,适应变化的,稳定的和高性能的。

从技术的角度看,一个 .NET 应用是一个运行于 .NET Framework 之上的应用程序。(更准确地说,一个 .NET 应用是一个使用 .NET Framework 类库来编写,并运行于公共语言运行时Common Language Runtime 之上的应用程序。)

.NET Framework 是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境。

.NET Framework 是以一种采用系统虚拟机运行的编程平台,以 CLR 为基础,支持多种语言(C#, VB.NET, C++, Python等)的开发库。

.NET 结构框图

图:.NET 结构框图

CLS

Common language Specification(公共语言规范),定义了提供给公共语言基础的接口,例如对于枚举类型的隐含表示类型的协定。

CTS

Common Type System(公共类型系统),类型是 CLR 的基础,CTS 是一个正式的描述类型定义和行为的规范,如类型的字段、属性、事件、方法、作用范围等。

FCL

Framework Class Library(框架类库),它向开发人员提供了大量类型。分为两部分:

1. BCL

Base Class Library(基础类库):它是一组标准函数库,包括:IO,String,Threading等。

2. 其他类

这些类库基本上都是引用 BCL,在这些类库的基础上做的扩充。如:ADO.NET,ASP.NET,Windows.Forms 等。

CIL

Common Intermediate Language(公共中间语言)。

CLR

Common Language Runtime(公共语言运行时),CLR 是 CLI 标准的实现。该运行时用于执行已编译的 .NET 应用程序。

CLI

Common Language Intrastructure(公共语言基础),是一套标准(ECMA335)。CLI 定义了构成 .NET Framework 基础结构的可执行码以及代码的运行时环境的规范,它定义了一个语言无关的跨体系结构的运行环境,这使得开发者可以用规范内定义的各种高级语言来开发软件,并且无需修正即可将软件运行在不同的计算机体系结构上。

CLR

图:CLR 结构图

C# 所具有的许多特点都是由 CLR 提供的, 如类型安全(Type Checker)、垃圾回收(Garbage Collector)、异常处理(Exception Manager)、向下兼容(COM Marshaler)等。

.NET 上的 CLR 为开发者提供如下的服务:

◆ 平台无关:CLR实际上是提供了一项使用了虚拟机技术的产品,他构架在操作系统之上,并不要求程序的运行平台是 Windows 系统,只要是能够支持它的运行库的系统,都可以在上面运行 .NET 应用。所以,一个完全由托管代码组成的应用程序,只要编译一次,就可以在任何支持 .NET 的平台上运行.

◆ 跨语言集成:CLR 允许开发者以任何语言进行开发,用这些语言开发的代码,可以在 CLR 环境下紧密无缝的进行交叉调用,例如,可以用 VB 声明一个基类对象,然后在 C# 代码中直接创建次基类的派生类。

◆ 自动内存管理:CLR 提供了垃圾收集机制,可以自动管理内存。当对象或变量的生命周期结速后,CLR 会自动释放他们所占用的内存.

◆ 版本控制

◆ .NET 安全

◆ 简单的组件互操作性。

◆ 自描述组件

自描述组件是指将所有数据和代码都放在一个文件中的执行文件。自描述组件可以大大简化系统的开发和配置,并且改进系统的可靠性。

CLI

CLI(Common Language Infrastructure,CLI)是 CLR 的一个子集,也就是 .NET 中最终对编译成 MSIL 代码的应用程序的运行环境进行管理的那一部分。

在 CLR 结构图中 CLI 位于下半部分,主要包括类加载器 (Class Loader)、实时编译器 (IL To Native Compilers) 和一个运行时环境的垃圾收集器 (Garbage Collector)。CLI 是 .NET 和 CLR 的核心,CLI 为 IL 代码提供运行的环境,可以将任何语言编写的代码通过对应的编译器转换为 IL 代码运行其上。

根据 C# 与 CLI 这两项标准,你也可以自己写出能够运行于任何操作系统上的 C#/.NET 平台, 如著名的 Mono 项目。

.NET编译运行流程

图:.NET编译运行流程

开发者使用高级编程语言编写程序,由对应的编译器将代码编译成中间语言(IL),运行的时候CLR 通过内置的实时编译器,将 IL 代码转换为操作系统的原生代码(Native Code)运行在操作系统之上。

C#

C# 语言是一种现代、面向对象的语言,它简化了 C++ 语言在类、命名空间、方法重载和异常处理等方面的操作,它摒弃了 C++ 的复杂性,更易使用,更少出错。它使用组件编程,容易使用。

C# 语法和 C++ 和 Java 语法非常相似,如果具有 C++ 和 Java 的基础,学习 C# 语言应该比较轻松。

C# 语言的特点

通用语言规范
自动内存管理
交叉语言处理
增加安全
版本支持
完全面向对象

C# Hello World

1) 编辑文本:HelloWorld.cs

using System;
class HelloWorld
{ 
    static void Main(){
        Console.WirteLine("HelloWorld!");
    }
}

2) 运行命令:

$ C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe HelloWorld.cs

将生成 CLR 可执行文件: HelloWorld.exe

3) 运行程序:HelloWorld.exe

控制台输出:Hello World!

Mono

Mono 简介

Mono 是一个跨平台的、开源的 .NET 实现,由 Xamarin 公司所主持的自由开放源代码项目。该项目的目标是创建一系列符合 ECMA 标准(Ecma-334 和 Ecma-335)的 .NET 工具,包括 C# 编译器和通用语言架构。

Mono项目包括三个核心的部分:

编译器(C#)

负责生成符合公共语言规范的映射代码,即 CIL。

类库

CLR

Mono 的运行时将运行 CIL 代码。

在Java的世界中,这项工作是由 SUN 公司完成的,SUN 针对不同的操作系统开发出相应的Java 虚拟机,以便让一个由 Java 开发的应用程序运行在不同的操作系统上

Mono 使用示例

Console Hello World

1) 编辑 hello.cs

using System;
public class HelloWorld
{
    static public void Main ()
    {
        Console.WriteLine ("Hello Mono World");
    }
}

2) 编译

与使用 Microsoft.NET 不同,要使用 Mono 的编译程序

$ mcs hello.cs

将生成 hello.exe 文件。

3) 运行

使用 mono 运行 hello.exe

$ mono hello.exe

将输出:Hello Mono World

Winforms Hello World

与上面类似,但是会通过 Winforms 库来显示图形界面。

1) 编辑 hello.cs

1
2
3
4
5
6
7
8
using System;
using System.Windows.Forms;
public class HelloWorld : Form{
static public void Main () {
Application.Run (new HelloWorld ()); }
public HelloWorld () {
Text = "Hello Mono World“; }
}

2) 编译

需要添加 dotnet 包。

$ mcs hello.cs -pkg:dotnet  

将生成 hello.exe 文件。

3) 运行

使用 mono 运行 hello.exe

$ mono hello.exe

将输出一个带文字 “Hello Mono World” 的窗口。

进一步了解可以参考:

  1. Install Mono: http://www.mono-project.com/docs/getting-started/install
  2. Mono Reference: http://www.mono-project.com/docs/getting-started/mono-basics
  3. Class Status | Mono vs .NET http://go-mono.com/status