C# 温故知新 基础篇(1) C#概述

简介:

C#概览

  C#语言是微软于2000年发布,基于.NET Framewrok框架的、面向对象的高级语言。经过近十三年的发展,经历了5次大的升级,最新版本为C#5.0(对应于.NET Framework 4.5),下面是C#语言发展过程的简单性总结:
  
C#版本 .NET 版本 Visual Studio 版本 特性描述
  C#     1.0/1.2      
.NET Framework1.0/1.1   Visual Studio    2002/2003    
C#第一个正式发行版,专为.NET编程提供支持
 C# 2.0  .NET Framework 2.0  Visual Studio 2005
C#语言开始支持泛型,.NET Framework 2.0新增了支持泛型的类库
 C# 2.0  .NET Framework 3.0  Visual Studio 2005
.NET Framework 3.0新增了支持分布式通信框架WCF,富客户端框架WPF,
工作流WF以及基于Web身份验证(Cardspaces)
 C# 3.0  .NET Framework 3.5  Visual Studio 2008
增加了对LINQ的支持,对于集合编程API进行了大幅改进.NET Framework 3.5对原有类库进行了扩展,从而支持
 C# 4.0  .NET Framework 4.0  Visual Studio 2010
添加了动态类型(dynamic)的支持,对用于多线程的API进行了大幅改进。强调了多处理和多核心支持
 C# 5.0  .NET Framework 4.5  Visual Studio 2012
主要对异步编程进行了增强(async和await)


 

 

 

 

 

 

 

  
 
托管代码(managed code):指由"运行时"控制程序的主要行为,管理诸如内存分配、安全性和JIT编译等方面。
  
    C#作为一门托管语言,和C/C++这些本地语言不同;C/C++经过编译后直接变成处理器可执行的机器码,而C#编译器则会将C#转换为CIL(简称IL)代码,而不是机器码,我们知道C#是基于.NET Framework 框架的语言,CIL代码转换为可执行的代码还需要经过CLR的转换,CLR根据需要编译CIL代码,这个过程称为JIT编译(Just-in-time)或即时编译。下面是C#代码编译到执行的过程:
 

C# 代码执行过程

   学习一种语言最开的方式就是开始动手写程序,我们先从一个最简单的Hello world开始:

复制代码
1 public class HelloWorld
2 {
3     public static void Main(string[] args)
4     {
5         Console.WriteLine("hello world");
6     }
7 }
复制代码
  
  程序编写完成后将代码所在文件保存为以.cs为后缀(C#编译器允许为C#源代码文件使用任何扩展名,但通常都是使用*.cs);接下来可以直接使用控制台(如果你想使用Visual Studio也可以)调用编译器进行编译(具体步骤参考: 通过控制台调用编译器和IL反汇编工具),根据前面的示例图,我们知道C#源码经过C#编译器编译后会生成一个托管模块,如下:
我们打开源文件所在目录,源码经过编译器编译后生成了一个exe文件,点击即可运行。在这里我们需要注意: 在进行一次成功的C#编译之后,生成的肯定是一个程序集,无论它是一个程序,还是一个库。在前面我们知道:为了执行一个方法,首先必须把它的IL转换成本地的CPU指令(由CLR的JIT编译器负责),下面展示了Hello World程序 首次调用时发生的情况:
一个方法只有在首次调用的时候会调用JIT编译器编译成本地代码,以后对该方法所有的调用都以本地代码的形式全速运行,无需重新验证IL并把它编译成本地代码。因为JIT编译器会将本地CPU指令存储到动态内存中。下面是方法 第二次被调用时的示意图:
这里我们需要注意,一旦程序终止,编译好的代码也会被丢弃。如果再次运行应用程序,JIT编译器将会再次将IL编译成本地代码。

MSDN:C#语言和.NET Framework介绍

《C#本质论》

《CLR VIA》

本文转自gyzhao博客园博客,原文链接:http://www.cnblogs.com/IPrograming/archive/2013/04/03/CSharpAgainOverview.html ,如需转载请自行联系原作者
相关文章
|
2月前
|
存储 传感器 Linux
Linux应用开发基础知识——I2C应用编程(十二)
Linux应用开发基础知识——I2C应用编程(十二)
71 0
Linux应用开发基础知识——I2C应用编程(十二)
|
9天前
|
存储 自然语言处理 算法
【软件设计师—基础精讲笔记6】第六章 结构化开发方法
【软件设计师—基础精讲笔记6】第六章 结构化开发方法
46 0
|
10月前
|
网络协议
计网概述
计网概述
55 0
|
10月前
|
开发框架 Java .NET
【C#本质论 一】C#概述
【C#本质论 一】C#概述
47 0
|
存储 编译器 C语言
C++从入门到精通(第三篇) :C++的基础和灵魂:类和对象(中篇)
如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数。
92 0
C++从入门到精通(第三篇) :C++的基础和灵魂:类和对象(中篇)
|
程序员 编译器 C++
C++(入门、核心、提高三篇)总结及补充
C++(入门、核心、提高三篇)总结及补充
C++(入门、核心、提高三篇)总结及补充
|
测试技术
笔记26-基础加强
笔记26-基础加强
|
Kubernetes Cloud Native 架构师
如何设计架构图?一文带你了解架构设计的本质 | 开发者社区精选文章合集(二十九)
架构图是什么?为什么要画架构图?如何画?有哪些方法?,架构设计的本质是什么?教你如何设计一张合格的架构图!
如何设计架构图?一文带你了解架构设计的本质 | 开发者社区精选文章合集(二十九)
|
Java C++
第一章 Java程序设计概述
1.1 Java程序设计平台 Java是一门设计优秀的语言,更是一个完整的平台。Java平台包括了一个庞大可重用的类库以及提供了安全性,跨系统,自动垃圾收集等优秀特性的执行环境。 这也使其成为自发布以来就颇为流行的高级程序设计语言。
1386 0
|
机器学习/深度学习 人工智能 算法