C# 基础知识 (四).C#简介及托管代码

标签: C#基础知识 C#简介 C#入门经典 托管代码 .NET Framework
1980人阅读 评论(0) 收藏 举报
分类:

        暑假转瞬即逝,从10天的支教生活到1周的江浙沪旅游,在这个漫长的暑假中我经历了很多东西,也学到了很多东西,也认识到了很多不足之处!闲暇之余我准备重新进一步巩固C#相关知识,包括C#入门知识、C#并行开发、ASP网站等.这篇文章我介绍的是书籍——C#入门经典(Beginning C#) 作者Karli Watson.主要包括的是我自己缺乏的一些C#简介知识和托管代码的内容.内容比较简单,参照该书籍较多,相当于自己的在线笔记!

                                             《C#入门经典》书籍章节简介:
                                      第01-14章 C#语言:C#简介及与.NET关系,语法和OOP
                                      第15-17章 Windows编程:使用.NET Framework各种控件
                                      第18-20章 Web编程:使用ASP.NET执行任务、ajax
                                      第21-24章 数据访问:数据保存磁盘、XML、LINQ
                                      第25-27章 其他技术:WPF、WCF、WF

一. 创建.NET应用程序步骤

创建.NET应用程序经历四个步骤如下:
1.使用某种.NET兼容语言(如C#)编写应用程序代码


2.把代码编译为CIL,存储在程序集中

3.在执行代码时(可执行文件自动运行或其他代码使用它时运行),首先必须使用JIT编译器将代码编译为本机代码

4.在托管的CLR环境下运行本机代码以及其他应用程序或进程

二. 托管代码

        首先对上面的术语进行简单的解释.
        CIL 在编译使用.NET Framework库的代码时,不是立即创建专用于操作系统的本机代码,而是把代码编译为通用中间语言(Common Intermediate Language,CIL)代码.
        JIT Just-In-Time编译器的任务是把CIL编译为专用于OS和目标机器结构的本机代码,OS才能执行应用程序.
        CLR
Common Language Runtime,公共语言运行库:负责管理用.NET库开发的所有应用程序的执行.
        程序集 编译应用程序时,所创建的CIL代码存储在一个程序集中.程序集包括可执行的应用程序文件(.exe)和其他应用程序使用的库(.dll).

        过去常常需要把代码编译为几个应用程序,每个应用程序都用于特定的OS和CPU结构,现在JIT编译器使用CIL代码(CIL代码独立于计算机、OS和CPU)编译为本机代码.
        托管代码 将代码编译为CIL,再用JIT编译器将它编译为本机代码后,CLR(公共语言运行库)的任务没有全部完成,还要管理正在执行的用.NET Framework编写的代码(执行代码的阶段叫运行时runtime).即CLR管理着应用程序,其方式是管理内存、处理安全性及允许进行垮语言调试.相反,不受CLR控制运行的应用程序属于非托管类型.
        换句话说:
        托管代码 (managed code)是由公共语言运行库CLR环境(而不是直接由操作系统)执行的代码.
        非托管代码(Unmanaged Code)在公共语言运行库环境的外部,由操作系统直接执行的代码.
        非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务,而托管代码从CLR环境中获得这些服务.
        举例:非托管类型如C++内存管理和分配,调用构造函数,使用完后释放内存.但是在C#中,只能编写在托管环境下运行的代码,使用CLR的托管功能让.NET自己与OS进行交互.
        两者区别可参照 http://bbs.csdn.net/topics/330164764
        垃圾回收 托管代码最重要的一个功能就是垃圾回收(garbage collection),这种.NET方法可确保应用程序不再使用某些内存时,完全释放这些内存.会定期检查计算机内存,从中删除不再需要的内容.

三. C#编写应用程序

        C#使用的是.NET Framework没有限制应用程序的类型,常见的应用程序类型如下:
        1.Windows应用程序
        这些应用程序(如微软office)具有熟悉的Windows外观和操作方式,使用.NET Framework的Windows Forms模块(一个控件库,其中控件如按钮,可用于创建Windows用户界面UI)可以生成这种应用程序.还可以使用WPF(Windows Presentation Foundation)建立更灵活卓越的Windows应用程序.
        2.Web应用程序
        是一些Web页面,可通过任何Web浏览器查看.其.NET Framework包括一个动态生成Web内容的强大系统,允许进行个性化和安全性等.这个系统叫Active Server Pages.NET(ASP.NET),使用C#通过Web Forms创建ASP.NET应用程序.还可以使用Silverlight编写在浏览器内部运行的应用程序.(接下来wo需要学习研究的东西)
        3.Web服务
        这是创建各种分布式应用程序的新方式,使用Web服务可以通过Internet虚拟交换数据.高级功能还可以创建WCF(Windows Communication Foundation)服务.
        补充一些概念知识如下图:

       总结:该文章主要是关于C#知识的基础简介知识和托管代码讲解,其中主要参照书籍《C#入门经典》,推荐大家学习C#的入门书籍.同时后面将讲述一些自己薄弱方面的基础知识,同时想结合自己想做的东西讲解些知识.如果有错误或不足之处还请海涵!高手飞过~
 (By:Eastmount 2014-8-17 夜12点 原创CSDN http://blog.csdn.net/eastmount/)

查看评论

关于C#托管代码与非托管代码的理解

C#托管代码是什么? 托管代码(Managed Code)实际上就是中间语言(IL)代码。代码编写完毕后进行编译,此时编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。程序...
  • u010272085
  • u010272085
  • 2016-02-20 09:27:08
  • 3314

本地代码与托管代码

最近在了解托管代码(managed code)和本地代码(native code)的知识,看到两篇文章,觉得不错,于是转载过来。以下是原文: ————————————————————————————...
  • playboy_lei
  • playboy_lei
  • 2015-12-15 17:29:09
  • 1398

C#的事件与托管(代码理解)

 using System;namespace MyCollections{    using System.Collections;    public delegate void ChangedE...
  • klan
  • klan
  • 2006-11-08 11:01:00
  • 1400

托管与非托管代码的区别

Unity 性能优化 系列(二)DrawCall
  • bioman1224
  • bioman1224
  • 2016-08-30 00:04:24
  • 803

两分钟学会在GitHub托管代码

本篇博客针对不会Git的小童鞋,大神们可以绕过,错误之处谢谢指正; 关于GitHub的强大此处不在说明,知道GitHub也有一段时间了,但是一直苦于不会使用。 本篇文章介绍的是如何将工程代码托管到...
  • duxinfeng2010
  • duxinfeng2010
  • 2013-03-09 10:22:39
  • 55328

托管代码

什么是托管代码?       托管代码是一microsoft的中间语言,他主要的作用是在.NET   FRAMEWORK的CLR执行代码前去编译源代码,也就是说托管代码充当着翻译的作用,源代码在...
  • HMSIWTV
  • HMSIWTV
  • 2012-09-03 17:26:31
  • 374

VS2010 : 正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。

出错提示:正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。原因分析:.NET2.0中增加了42种非常强大的调试助手(MD...
  • NarutoInspire
  • NarutoInspire
  • 2018-03-22 14:07:14
  • 16

C#报错“OS加载程序锁内执行托管代码,不要尝试在DllMain或映像初始化函数内运行托管代码”的解决方法。

在VS下进行C#编程并调用C++的DLL时候,有很小的概率报错“OS加载程序锁内执行托管代码,不要尝试在DllMain或映像初始化函数内运行托管代码”,其解决方法是把VS菜单中的 调试—异常—Mana...
  • niusiqiang
  • niusiqiang
  • 2015-01-25 18:03:17
  • 1306

托管代码和非托管代码

托管代码是一microsoft的中间语言,他主要的作用是在.NET FRAMEWORK的CLR执行代码前去编译源代码,也就是说托管代码充当着翻译的作用。 源代码在运行时分为两个阶段:   ...
  • susan19890313
  • susan19890313
  • 2012-05-17 10:36:13
  • 1452
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 252万+
    积分: 2万+
    排名: 397
    牛人博客
    博客专栏
    最新评论