读书感受 - 软件工程师 - C#规范3.0版

      这几天花了点时间也把《C#规范3.0版》过了一遍,还是浏览,现在时间对我来说挺重要,只能过过,所以牺牲了一些具体学习的内容,建议初学者详细的看每句话,吃透C#的语法。

      这个系列的电子书资源可以在我的CSDN下载频道找到:http://download.csdn.net/source/1792062  。

      规范3.0,其实只是在1.2版的基础上,加入了2.0的概念,以及3.0自己的一些新增的概念而已。没有象2.0版那样是一个独立的新增内容的介绍,这个是3.0的一个败笔,一方面它没有把自己新增的东西具体分出来描述,另一方面,也没有把2.0中的那些概念进行详细的描述。内容是全,但是描述没那么清楚。所以,建议大家,从1.2版规范开始仔细看,然后仔细看2.0版规范,最后3.0版就是浏览一下,对其中新的一些概念详细的看,其它内容过过保留些印象就行了,不必那么仔细,浪费时间。

       这次过3.0版的时候,多了一些想法,也补充了一些基本概念。首先,这个规范,有几章其实是对C#这个语言的词法、文法做了诠释,这个对于想要开发一套新的语言可以有借鉴,知道了语言该定义的一些规则。然后,通过这个规范,可以实现C#的代码生成器,代码行数统计之类的工具,因为它把代码编辑的内容做了描述,比如怎么判断该行结束(使用换行标示符)等等。还有其它很多的东西,大家自己去体会吧。

      下面对其中的一些内容做一点点补充:

 

       对于结构,没有描述得那么清楚,这里补充一下,加深这个概念的理解。结构是值类型,所以结构不能继承,但是结构能够实现接口。听起来挺简单,但是仔细想一下,结构是值类型,值类型的能够实现引用类型的方法的说法,有点怪,值类型一般只用来保存数据。我们知道,任何类型的最终基类是object,因为object是引用类型,实际上值类型也从System.ValueType继承来实现的。为什么分值类型和引用类型,不过是数据结构不同,分配内存时存储的形式不一样。一个在栈,一个在托管堆。这里对于结构能够实现接口不是很合适。结构的存储方式在栈。如果调用结构的方法倒也罢了,但是调用接口的显式实现的方法时,这个就要复制一个结构的副本来充当接口的对象,所以会消耗系统资源。一般情况下,不推荐结构来处理接口的显式调用。对于结构的用处,貌似不大,因为对象都是自定义的类类型这个数据结构了。
      这里顺便设计下对象,对象,按定义,是类的实例,即所有new出来的都叫对象。但是规范里说了“C# 的类型系统是统一的,因此任何类型的值都可以按对象处理。”“值类型的值则通过执行装箱和取消装箱操作(第 4.3 节)按对象处理”。这个真是个自我矛盾的说法,值类型的数据,也是对象,比如int i=0;其实它是int i =new int();i=0;的缩写,因为语言关系,把这个值类型的存储结构的不同不当成对象来看待。这里i.ToString()等等,是继承自object的方法。C#是面向对象的,所有类型都是对象,不该把值类型分出去。比如整型,它虽然是一个数值,但是抽象起来,它是一个数字,数字这个也是一个对象。规范里这点说的不正确。

      对于接口,这里也补充一下。接口的实现分隐式和显式两种。接口的隐式实现,可以直接由实现的对象或结构来调用。但是接口的显示实现,只能由接口的实例来调用。比如:
interface IT
{
  void Test();
}
class CClass1:IT
{
   int i;
   
   //隐式实现接口,接口的方法必须为public
   public void Test()
   {
      return;
   }
}
class CClass2:IT
{
   int i;
   
   //显式实现接口,接口的方法必须为public
   void IT.Test()
   {
      return;
   }
}

void Main()
{
  CClass1 c1=new CClass1();

  c1.Test();

  CClass2 c2=new CClass2();

  c2.Test();  //错误

  IT it=(IT)c2;  //显式转换为接口IT ,或者直接 IT it=c2;隐式转换

  it.Test();  //正确
}
接口也是引用类型,所以接口的实例看起来有点怪(对象it),因为它不是一个具体的包含实现方法的对象,其实这个接口的实例对象,只是实现该接口的对象的实例c2,这个也是多态的一个内容。所以,上面CClass2的定义可以为:
class CClass2:IT
{
   int i;
   
   //显式实现接口,接口的方法必须为public
   void IT.Test()
   {
      return;
   }

   //类本身的一个Test方法
   public void Test()
   {
   }
}
上述的类,其实可以用结构来代替,同样适用。其实上面是接口的映射问题,这个概念也要搞清。

      上述的这些内容,其实是基本概念的补充,我多次强调概念的重要性,概念不清楚,做编码的时候可以依靠编辑器来纠正,但是对架构设计时的影响很大,一旦有误,则修改起来会牵动一批代码。所以,如果学C#,还是得以C#规范为主,搞清楚概念,然后再去研究高级的技巧应用方面的东西比较合适。虽然这个微软自己写的C#规范里面有很多自我矛盾的地方,所以大家在看规范的时候不要死记硬背,而是要理解它,这样才能深刻,不被误导。

 

      不废话了,今天又是周末了,时间过得真快。大家周末愉快 ``````

时间: 2024-11-06 03:39:42

读书感受 - 软件工程师 - C#规范3.0版的相关文章

读书感受 - 软件工程师 - C#线程参考手册(多线程技术分析)

      这几天,花了些时间,浏览了下<C#线程参考手册>,对初学者比较有用...       该书可以在我CSDN下载频道获得,请购买原书支持正版(http://lzhdim.download.csdn.net/).       几年前买过一本Intel的工程师写的<多核程序设计技术>一书,本来想开个专题来对多核程序的设计做介绍的,由于时间问题,该专题改为"并行程序设计"了,但该书的重要内容却没有记录下来,比较遗憾,后续有时间再补吧.(现在叫并行程序的比较多

读书感受 - 软件设计师 - 你必须知道的.NET (C#类型存储方式分析)

      这几天花了些时间,相对仔细的阅读了<你必须知道的.NET>这本书,因为没有多少时间,请大家在看该书的时候一定要理解内容,转变成自己的经验.下面仅做简单的书评.         该书详细的介绍了C#类型的存储分配问题,对于值类型和引用类型的存储和类型的转换,都用了大篇幅来进行说明,如果还想再详细些,就得去看.net framework中的底层方法和机制了.其实它的这个存储分配,不该说是C#,应该是.net这个框架的存储分配方式.对于其它语言,比如VB.NET,VC++.NET也是一致

音乐识别软件SoundHound更新至5.0版

流行的 音乐识别软件SoundHound更新至了5.0版本,带来了一些增强和改进.首先最容易被发现的就是软件的新界面,在首页中增加了热门歌曲推荐,这里你可以找到那些打榜歌曲.分享最多的歌曲和被推最多的歌曲.同时还新增了song stream功能,这里你可以在SoundHound软件内听到各歌手的歌曲.SoundHound界面截图SoundHound界面截图我个人比较喜欢的一项更新是SoundHound将Spotify整合,当你搜索一首歌时,会有一个新的选项--Play Now in Spotif

首推消耗资源排行榜 安卓优化大师3.1.0版发布

硅谷网讯 导语:日前,2013年全球移动互联网大会刚刚落下帷幕.其中作为最"花样"CEO雷军的一段精彩演讲内容,一下子引起了很多安卓手机用户的共鸣:"--我们来看看他们都在抱怨什么?最大的抱怨就是Andirod手机耗电,我买了新手机用了一个月,手机半天就没电了.还有抱怨说,我用了一段时间之后动不动手机就没反应,而且流量消耗特别快,还有各种各样的弹窗.广告,整个体验比较差,抱怨特别多--"如此的应用环境下,http://www.aliyun.com/zixun/agg

北大青鸟软件工程师 ACCP6.0课程体系

北大青鸟软件工程师 ACCP6.0课程体系. 第一阶段: 面向入门,趣味性为主,引导进入丰富多彩的IT行业,树立继续学习的信心 技能上主要培养学员的逻辑思维能力,在编程方面具有一定的感性认识 第二阶段: 面向基础,理解概念为主,培养自学能力. 技能上主要训练面向对象的思想.代码编写的熟练度和规范度,开始接触企业的应用,在编程方面具有一定的理性认识 第三阶段: 面向就业,企业项目实战训练为主,培养学员独立分析问题.解决问题.总结问题的能力和习惯 技能上讲解业务流程.行业应用.主流框架技术,按照企业

软件工程师两年的职场训练

德鲁克说: "组织的成员作为个体,发展得越好,组织也会取得更多的成就.这一点正是今天所有经理人培训和资深经理人教育课程重点和背后的真谛所在.当组织严谨的作风和道德精神不断发展.组织的目标和处事能力不断提升时,组织内个体成员的发展空间也愈加广阔." 借着写博客把关于软件开发中新人训练的想法总结一下,也希望抛砖引玉,得到大家的指正. 综合来说,一个软件工程师的培养需要涉及以下四个方面:   1. 产品专业开发领域  指的是产品开发过程涉及的专业技术.如操作系统.数据据等.这里不讨论这一项.

招聘【.Net高级软件工程师】 (上海)

问题描述 公司名:上海扬博网络有限公司城市:上海工资:根据能力而定有意向者请将简历发到recruit@youngbro.com.cn.Net高级软件工程师(2名)职位描述:1.负责对公司业务支持系统的应用平台的升级,及相关软件产品的技术支持:2.负责新应用系统的设计.开发:3.负责对网站开发团队进行协调管理;岗位要求:1.大学本科以上学历,计算机及相关专业毕业,3年以上工作经验(必要条件):2.精通Windows平台下的Web技术开发,具有丰富的项目经验,熟悉ASP.NET,Javascript

软件工程师的职业之路

原文:http://blog.csdn.net/ladofwind/article/details/19103915 记得看过某篇文章写到21世纪世界范围内最好的前十大职业有软件工程师一项,平心而论,应该说缺少的是良好职业素养的,有经验的,合格的软件工程师. 从国内招聘网站上的数据也能看出来,近些年由于移动互联网,互联网的蓬勃发展,以及因为互联网对传统行业的整合一系列影响,软件工程师需求一直很旺盛,另一方面,高校的计算机专业培养出的人与企业需要的人有差距,所以知名大学的硕士博士首先有更多的机会进

物理学家不再吃香?可以转型当 AI 软件工程师呀

物理学家 Oscar Boykin,现在转型做了软件工程师 雷锋网按:人工智能已经越来越火热,对于有着突出数学能力和抽象思维能力的物理学家,进军 AI 是很有优势的.近日,<连线>杂志的资深撰稿人 Cade Metz 撰文表达了对物理学家进军 AI 及机器学习领域的看法.Cade Metz 一直关注人工智能,比特币,数据科学以及 Google.Facebook 等公司的科技动态.原文标题<Move Over, Coders-Physicists Will Soon Rule Silico