泰坦之旅小菜,小菜的CLR之旅(2)

第二章 初探CLR
引言
小菜看到园友的回复,决定在这里回复几个网友的问题.
Gyoung : " 我只想知道最后面试结果。。。"
小菜:“在面试官文我第二个问题的时候,我有点听懵了,重复问了下问题,就是那个List 和List 的问题搞的面试官很不爽,也知道这是大忌,回答的也不好,那时候就知道没戏,尽管把程序题都写出来了,呵呵,还花了几分钟重构和验证参数,整理代码的严谨性,但这些都是徒劳。还有一点,我是带电脑过去的,是在电脑的Vs上编写的,面试官对这点也有点不爽。但小菜也知道如果底层知识没搞清楚就算写出再华丽的代码又有什么用呢,因为我那天是请假过去面试的,下午要上班正好带着电脑。
请原谅我骑驴找马,我也是第一次在职请假去面试。说真的如果我真的面试被通过了,我去之前就想过,我95%的机率是不会去入职的,因为在我现在的公司办辞职申请和流程最起码需要两个星期到一个月,如果我愿意去入职,要我的公司也不愿等我一个月的,呵呵,我只是想通过面试提升,锻炼下自己。
徐 磊 :"我的问题是:值类型可以在堆上吗?"
小菜:"世界太小了,居然还可以博客上碰到。可能是我记错了,小弟不才,但也读过几本C#基础书籍如:C#高级编程(第6版)(当字典用),园子里的大牛写的, 你必须知道的.Net ,书中在讲 值类型的时候 ,都有说道过值类型通常分配到栈上,因为在看的时候,有抵触情绪,心想值类型通常分配到栈上哪个程序员为什么非要把他放在堆上呢,这种非主流的写法不仅消耗性能用不好而且会造成不稳定因素.....",当问到这个问题的时候我准备回答说:“值类型通常分配到栈上,但也可以分配到堆上”,如果我是面试官我也会接着问到:“在什么情况?怎样实现?” 当时学习的时候有抵触情绪,也没仔细看过。我就没有回答:“值类型可以在堆上吗?”这个问题,因为我知道没戏,不想被问的像傻冒样,呵呵,血的教训,你们懂的。
xx网友:"我X,做了两年还是4k,刚毕业的菜鸟吧,一猜就知道只会拖控件...."
小菜:"毕业工作差不多快两年了,感觉时间过的很快,有种岁月催人老的感觉。我上回写到我做了两年还不到4k,其实没有4K,每个月打到卡里面的只有3.2K,没有住房公积金,去年还是几次旅游,今年一次都没有,之所以这样写事怕园友们笑话我。我在身边的朋友刚毕业的什么都不会的也有一出来就4K,4.5K的,很多,我只能说3.2K并不代表我的价值。我只所以不想辞职有两个原因:1.现在的公司是我的第一个公司,公司是创业公司,老板没投了很多钱进去了,还没盈利,老板人不错 。2.因为我们技术组同事之间没有高傲和隔阂,不管问什么问题他们都会非常耐心的回答(在心情和状态不好的时候也一样),有些问题会引出一些底层的问题他们都一一帮给你解释,我们老大还有其他几个同事上班就没看见过他们看新闻啊,聊微博的什么的 工作狂,典型的技术狂热追求者,如果你和他们一起谈技术他们有时会谈到非常激动,有那种促膝夜谈的感觉,他们学习能力很强大,一些新技术出来在我们的资料共享里经常可以看到一些电子版的资料和做的Demo。跟着他们我学到了很多东西,就连最近写博客也是我们老大跟我说的让我多写写博客做一些技术积累。"
小菜:" 前几个月自己利用周末的时候再外包网站上帮别人做了一个应用程序的架构Asp.net的用的是Asp.net Mvc3 +EntityFramework+企业库,每天下班回去搞个1-2个小时,周末搞下,3个星期吧做完后给他们演示了一遍,交给他们测试,5天后他们给我打了9K人民币,项目中也有些比较头疼的问题最后还是一一解决了,可能是运气好吧,之后请了几天年假回家旅了下游,陪了下家人,挥霍的也所剩无几。
前天和朋友一起吃饭,朋友问我早上怎么走那么晚,我说去面试可以起晚点,他说他们公司也在招人,去他们公司吧,不用面试直接过,没有试用期5K,我说等我辞职了再说吧,其实我知道他们公司就两个过技术的连美工都没有,做销售的有40多个人公司也不小吧,软件公司,不过不是自己做软件,是买的国外的软件产品源代码,自己根据需求改下卖给客户,其实说改都算不上应该说是配置。每天上班也挺清闲的可以喝下茶什么的,不过对于做技术的年轻人来说没什么也是。如果去那样的公司做两年后你会发现自己已经做不了技术了。。。。。我只能说现在过的还行,不算很压抑吧,我是一个理想主义的技术追求者。
哈哈,上面扯远了,接着上回说。。。。。。。。
小菜想要弄清ValueType父类是哪个,于是在想在Goole上搜个.net 类库结构体系继承树图看下,但翻了N页都没有找到,心中说道nnd ,Goole退出内地市场了搜索都不好使,于是在百度上也搜了下也没找到。
小菜想也不能在一个树上吊死呀,就打开VS 想通过按F12 转到定义 看到 ValueType的父类和体系结构,小菜先找到int类型准备转到定义一级级的找到ValueType上级,当int类型转到定义后,小菜傻眼了。
小菜的CLR之旅(2)泰坦之旅小菜

都是接口,没有父类。不可能啊,Int类型是有父类的呀,于是又定义一个 ValueType 按F12 转到定义
小菜的CLR之旅(2)泰坦之旅小菜
小菜的CLR之旅(2)泰坦之旅小菜
什么抽象类,没有继承。不解中,在网上找了下资料,也没找到具体怎么回事,它是怎样完成继承的。这是小菜只有找到自己的老大问下了,跟老大说完这一现象之后,老大依旧热情的老大说道 "这个是.net体系里面的机制,你需要看下C#与.Net 的协作机制 ,最好系统的看下.net体系结构。"
小菜:"呵呵,以前还真没注意到这个问题。。。"
只见老大在他电子书库里瞬间找到一本的电子书说道:"QQ接下"
小菜: "Microsoft.Press.CLR.via.Csharp.3rd.Edition.Feb.2010 " 是英文版,准备问句有中文版的吗,呵呵,感觉不好意思,如果问了好像自己不是搞技术的一样!,虽说新技术都是英文版的,Silverlight,Blend,Wcf等资料我当时学习的时候中文资料都没有,都是硬着看的,不过还好,不懂的可以Google下再揣测下,就差不多了。
.Net体系的几个知识点下章会一一说道

C#与.Net的关系
.NET框架是微软公司推出的一个全新的编程平台,C#是专门为与微软公司的.NET Framework一起使用而设计的(.NET Framework是一个功能非常丰富的平台,可开发、部署和执行分布式应用程序)。C#就其本身而言只是一种语言,尽管它是用于生成面向.NET环境的代码,但它本身不是.NET的一部分,.NET支持的一些特性C#并不支持,而C#语言支持的另一些特性,.NET也不支持(例如运算符重载)。
公共运行库(CLR)
CLR:公共语言运行时,是一个可以被多个编程语言使用的运行库。.net的跨语言编程因为有了CLR才得以实现.
CLR里面包括通用类型系统(CTS)和通用语言规范.(CLS)
什么是CTS?
.Net中为了解决多语言类型的同意,在CLR中加入了CTS。 CTS定义了可以在中间语言中使用的预定义数据类型,所有的面向对象语言都可以生成面向.Net FrameWork 的语言都可以生成最终基于这些类型的编译代码。
刚刚说到预定义数据类型这个概念是指:C#认可的基本预定义类型没有内置于C#语言中,而是内置于.NetFrameWork中。例如,在C#中声明一个int类型的数据时,声明的实际上是.Net结构System.Int32的一个实例。这听着好像有点深奥,类似于在C#中打了一个int类型的标记来表示Int32,它实际上是映射为.Net结构System.Int32。使用VB语言也是一样,从而达到多语言的类型统一,以前知道.NetFrameWork的作用但不知道C#里面没有内置而是映射。
哦。。。。这就是刚才转到定义转了半天也没找到父类的原因,这些类型结构 都被内置在.NetFrameWork中。如图:
小菜的CLR之旅(2)泰坦之旅小菜

-----------------------未完待续,前面写了蛮多无关的,只是想引出后面的CLR知识,欢迎拍砖,你的顶就是我的动力----------------------

Tags: 

延伸阅读

最新评论

发表评论