菜鸟CLR VIA C#之旅—开始旅行:千里之行始于足下
菜鸟踏上CLR VIA C#之旅,小学成绩一般般,初中成绩普普通通,高中成绩勉勉强强,三流大学凑活毕业。偶然间踏上了北京之旅,也开始了他作为程序员的梦想。就这么一个摆在大街上不会有人再看第二眼的普通到无法再普通的普通人,就是本次旅行的菜鸟了。希望《CLR VIA C#》这本圣经能带菜鸟踏上更高的台阶!。
顺便说下菜鸟学习.net的经过。菜鸟是09年10月份(大三上学期)接触C#的,自己买了本《C#入门经典》自己看的。然后又买了本《C#高级编程》,就这样走上了.net之路,在刚开始自学的时候,面向对象的基础知识就像一道门槛时时阻碍着菜鸟,在此要特别感谢菜鸟的室友,大家都叫他果爷,就菜鸟个人认为,他是我们专业技术最好的,不管菜鸟的问题多幼稚或简单,他都会认真解答。
到了今年3月份时,菜鸟进入了北京一家金融软件开发公司实习,一直到现在。在工作中发现了自己有很大的弊病,由于自己刚刚毕业,觉得很多事情自己不懂是理所当然。我发现自己错了,错的离谱,所以请记住,学习不是被动的,当任何事务变成被动的时候,那件事已经不再是你的事了!
菜鸟从小就是一个有理想的人,但目前菜鸟必须先在北京把自己养活,然后才能发展,随着工作越深,菜鸟心中的担心、空虚和迷茫就越多!但菜鸟相信,任何东西,只要一个人认真地去学,投入很多时间和精力,肯定是能够干好的。在学C#的过程中真的体会到了“学的越多,才知道会的越少”这句话的含义。学了语法之后会发现很多Framework中的类不太会用,学了一些类库的用法又发现还有MSIL、CLR和JIT、GC这些高深的东西。这才发现.NET的宽广和驳杂,对同学们的“其实.NET就这点儿东西,拖拖控件而已”的说法颇不赞同。就在意识到.NET的博大精深的同时,菜鸟发现自己一直受困在目前的水平中,想要自我提高,很难很难。知道要学的东西有一大堆,但菜鸟却是根本不知道到底要学些什么东西知识才能让我得到快速进步,!这才是让人最痛苦的事!菜鸟也经常查阅这方面的信息,但似乎总是很乱,从没有一个人能够详细透彻地给菜鸟以明确的指引。
在偶然的一个晚上,菜鸟躺在床上的时候,突然有件事物触动了菜鸟的灵感,对啊,怎么把它给忘了,它就是一直默默守候在菜鸟的床头桌上的《CLR VIA C#》,记得周公说过:“如果你没有时间的话,那么学新技术不如学基础、学应用不如学思想。技术虽然一直在变,但是越是基础和越是抽象的技术变化越慢,越是偏向应用越是具体的技术变化越是快,从性价比上说,学习基础知识性价比更高。”说实话,这本书菜鸟买了有段时间了,一直没有静心下来认真学习。菜鸟准备系统学习这本伟大的书,并将自己的心得体会写下来,权当学习笔记,加深印象及理解,技术的深度来自于总结。菜鸟知识有限,文章中难免会有很多低级可笑的错误,希望得到各位高人的指正批评,这样菜鸟进步的会更快!
好了,上面废话了这么多,菜鸟给大家演示一个最简单的例子—Hello,word。1988年Brian W. Kernighan和Dennis M. Ritchie合著了软件史上的经典巨著《The C programming Language》,从那时起,Hello, world示例就作为了几乎所有实践型程序设计书籍的开篇代码,一直延续至今,除了表达对巨人与历史的尊重,本文也以Hello, world示例作为我们扣开学习的大门,开始菜鸟循序渐进的CLR VIA C#认识之旅。
从Hello word开始:
1 using System;2 3 class HelloWord4 {5 static void Main(string[] args)6 {7 Console.WriteLine("Hello,word!");8 }9 } 相信即使是刚接触的人对这段代码都不陌生,是的,它向陌生的世界打了个招呼,那么运行在高级语言的易做图又是什么呢,让菜鸟来为大家进一步剖析,对编译后的可执行文件Hello word.exe应用VS自带的ILDasm.exe反编译工具打开,在这里,菜鸟给大家介绍一个容易被忽视的VS技巧:
配置外部工具
对于开发中我们可能会经常用到一些外部工具,比如ILDASM和ILASM等,我们可以配置成Visual Studio 2010的一个菜单项,需要的时候点击一下就可以打开,而不必每次都费时费力找到该文件所在的位置再双击打开。配置过程如下:
从工具栏上找到“工具”-“外部工具”,如下图:
将ildasm.exe路径设置下(电脑中ildasm.exe文件位置),比如菜鸟电脑:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\ildasm.exe,标题随便自己设置,如下:
配置好以后就可以直接在工具栏中运行了:
好了,说远了,言归正传,还是来看我们的 Hello word的MSIL编码,用VS自带的ILDasm.exe反编译工具打开后如下:
由上图可知,编译后的IL结构中,包含了MANIFEST和HelloWorld类,其中MANIFEST是个附加信息列表,主要包含了程序集的一些属性,例如程序集名称、版本号、哈希算法、程序集模块等,以及对外部引用程序集的引用项;而Hello_world类则是我们下面介绍的主角。
首先我们来看一下MANIFEST程序集清单分析:
1 // Metadata version: v4.0.30319 2 .assembly extern mscorlib 3 { 4 .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. 5 .ver 4:0:0:0 6 } 7 .assembly 'Hello word' 8 { 9 .custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = ( 01 00 29 2E 4E 45 54 46 72 61 6D 65 77 6F 72 6B // ..).NETFramework10 2C 56 65 72 73 69 6F 6E 3D 76 34 2E 30 2C 50 72 // ,Version=v4.0,Pr11 6F 66 69 6C 65 3D 43 6C 69 65 6E 74 01 00 54 0E // ofile=Client..T.12 14 46 72 61 6D 65 77 6F 72 6B 44 69 73 70 6C 61 // .FrameworkDispla13  
补充:软件开发 , C# ,