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编译成本地代码。

参考资料&进一步阅读

维基百科:CSharp

.NET 中的幕后英雄:MSCOREE.DLL

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

《C#本质论》

《CLR VIA》

转载于:https://www.cnblogs.com/IPrograming/archive/2013/04/03/CSharpAgainOverview.html

C# 温故知新 基础篇(1) C#概述相关推荐

  1. MySql基础篇---001 数据库概述与MySQL安装篇:概述,表和类对应关系,表关系、数据库卸载,下载,安装,配置,启动,登录,演示,图形化工具,目录结构,常见问题

    第01章_数据库概述 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 为什么要使用数据库 持久化(persistence):把数据保存到可掉电式存储 ...

  2. 基础篇001. STM32概述

    目录 1. ARM简介 2.  ARM处理器的特点 3.  STM32概要 3.1  STM32主流系列概述 3.2  STM32无线MCU 3.3  STM32超低功耗MCU 3.4 STM32高性 ...

  3. C# 温故知新 基础篇(7) 接口思维导图

    下面是C#继承的思维导图,全屏观看点击这里:C# 接口<思维导图>. 参考资料&进一步阅读 <C#本质论> 分类: C# 本文转自gyzhao博客园博客,原文链接:ht ...

  4. 《JUC并发编程 - 基础篇》JUC概述 | Lock接口 | 线程间通信 | 多线程锁 | 集合线程安全

  5. MySQL学习笔记(基础篇未完待补充)

    一.MySQL数据库基 目录 一.MySQL数据库基础篇 1.数据库概述与MySQL安装篇 第1章:数据库概述 1.为什么要使用数据库 2. 数据库与数据库管理系统 2.2 数据库与数据库管理系统的关 ...

  6. MySQL数据库笔记-基础篇

    文章目录 MySQL概述 数据库相关概念 小总结 MySQL数据库 版本: 启动与停止 客户端连接 关系型数据库 数据模型 小总结 SQL SQL通用语法 SQL分类 DDL 数据库操作 查询 创建 ...

  7. 穿越Java - 基础篇 第十章 反向探知 - 反射 | 第1节 反射概述

    主题:反射概述 开发环境 更多干货 定义: 作用: 理解: 总结: 开发环境 基于:IntelliJ IDEA.Maven构建工具.JDK1.8.SpringBoot 2.3.4 .Spring4.3 ...

  8. Animated之基础篇-概述

    (一)前言 之前我们已经学习过LayoutAnimation布局动画了,在移动客户端开发中流畅并且非常有意思的动画对我们提升用户体验是非常有用.所以官方在开发React Native的时候也已经做了相 ...

  9. MySQL基础篇:子查询

    文章目录 概述 where型子查询 from型子查询 EXISTS型子查询 复制表子查询 概述 在某些情况下,当进行一个查询时,需要的条件或数据要用另一个select语句的结果,这个时候,就要用到** ...

最新文章

  1. 1026 Modular multiplication of polynomials
  2. linux下vim 打开文件方式
  3. python能做什么脚本_Python能做什么
  4. Python函数传参方式超级大汇总
  5. 鸿蒙十系统更新机型,高歌猛进,鸿蒙系统升级机型再次确认,花粉:终等到!...
  6. Kettle中设置环境变量的几种方式
  7. linux fpga通信,基于Linux的FPGA通信技术研究与实现
  8. SharePoint PowerShell使用Export-SPWeb和Import-SPWeb指令来导出和导入网站
  9. Java第32课——求数组元素最大值
  10. 年轻人想创业就去干吧,
  11. SAP中的贷项凭证、借项凭证
  12. 信鸽推送集成采坑之代码混淆报错/XINGE: [Util] please add wup-1.0.0.E-SNAPSHOT.jar in your libs
  13. CTF线下赛AWD总结
  14. Android——Hander+Service,实现后台长期周期性定时任务
  15. Android 内存优化——常见内存泄露及优化方案
  16. 战'疫'逆战学习总结分享
  17. 无法成功执行catalog.sql,ORA-04045 ORA-04064
  18. laravel中的fillable和guarded属性
  19. Python爬虫利器四之PhantomJS的用法
  20. BIOS--INT 0x10

热门文章

  1. 离线实时与api对应的关系+未来流行度
  2. flink on yarn模式下释放flink占用yarn的资源
  3. mysql的事务操作
  4. ?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.
  5. 奇异值与特征值什么时候相等-matlab代码验证
  6. Exception in thread main java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream
  7. ubuntu16.04下面git与github对应起来
  8. OpenCV学习笔记九-Canny边缘检测
  9. OpenCV学习笔记-关于使用Mat.at(i,j) = int 语法报错
  10. windows下adb shell命令杀进程方式