相关文章:.NET十年(下)

  引言

  语言是程序开发者行走江湖的手上利器,各大门派的高手在论坛、博客为了自家门派争吵不已早是技术世界中的亮丽风景,虽多少为刚刚踏入江湖的新手提供了思考的素材,但也同时迷惑了初出茅庐的前行方向。

  本文不欲计较门派的高下,旨在明辨技术的真谛,这就是.NET平台下的开发利器:C#语言,并从其变迁的进程中对于.NET技术发展把玩一番。

  本篇,我们走在历史,对.NET的过去尤其是c#语言做以回顾,具体而言就是.NET 1.0、2.0、3.0的一路走来。

  .NET之,历史脚步

  C#十年了。这个日期是从Anders Hejlsberg在1998年组建C#团队开始算起的,掐指算来已是十年有余了。作为.NET平台下的静态强类型语言,在过去10年的发展历程中披荆斩棘,已经逐渐成为应用开发语言中的佼佼者。从TIOBE开发语言排行榜的最新统计来看,C#位居第六成为开发语言市场的顶级产品:

  (注:此为2008年12月的TIOBE开发语言排行榜,参考http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)

  因此,在我们讲解历史的开始,将C#发展历史中的里程碑作以标记,来感受一下C# 10年的发展历程,为每开发者在心底搭起一座通往未来的桥梁。

  下面我们分别从不同的历史阶段来了解C#语言的变迁,并讨论在每个变迁的里程碑上值得品味的闪光点,并由此为未来的发展打一个基础。

  1.0,从诞生到立足

  2000年之夏,微软大当家­­——盖茨先生着手战略调整,微软大刀阔斧的进行了技术改革与创新,并由此为世界带来一个新的名词,这就是.NET。那么什么是.NET呢?在.NET这一概念诞生之初,这一概念连微软本身都充满了定位的错乱和迷茫,以至于一时之间处处皆为.NET,大有一统江湖之势。随着.NET平台的逐渐完善,概念和定位上的混乱已经日渐清晰,作为这场变革中的一项重要内容,一种全新的、能够适应.NET平台特性的高级语言C#也随之诞生。这一任务理所当然的落在了Anders Hejlsberg的身上,作为Delphi之父,大师级的Anders从1998年11月开始领导了他的小组为这个世界带来全新的语言宠儿,这就是:C#。

  初出茅庐的C#,就像羞羞答答的小姑娘,步步留心、时时在意,学着他人的模样,生怕在前辈面前丢脸。当她以全新的姿态出现在万千程序开发者眼前时,其兼取百家之长、优雅简洁之态、摒弃复杂之弊的特性,立时令所有的观望折服。在迎来所有目光的关注的同时,迅速成为高级语言战场的骄子。

  那么,C#诞生之初兼取百家之长,具体都有哪些优秀品质呢,总结起来主要体现在两个方面包括:

  • 面向对象编程。C#实现对属性、事件、委托、方法、索引器、构造器的全面支持,为面向对象的封装、继承、多态和接口提供了语言级别的支持。以继承为例,c#支持单实现继承和多接口继承,摒弃了C++中多继承带来的复杂性。
  • 跨平台运行时支持。CLR是.NET平台下应用程序的通用语言运行时,是C#程序赖以生存的跨平台环境,因此C#具有了.NET平台语言的所有优势,通用类型系统、自动内存管理、统一异常处理、完全的FCL访问权,都成为C#无与伦比的优势所在。

  2.0,变革之作

  C# 2.0是一次完善和补充,也是一次变革与重生。在2.0中引入了诸多的语言特性,完善了1.0基础上的某些不足,例如匿名方法将代码放在委托而无需创建新的方法;可空类型实现了对值类型的null操作;而部分类将一个类分解到多个类文件中。这些补充和完善, 总结起来主要包括:

  • 匿名方法
  • 可空类型
  • 部分类
  • 迭代器
  • 泛型

  其中,泛型支持是C# 2.0的重中之重,.NET框架从CLR级别实现了对泛型的支持,提供专门的IL指令支持泛型操作,同时配合C#语言机制构造一种全新的编程结构,实现了对类型抽象化的通用处理方式,这就是算法重用。

  以最简单的交换数据为例,我们来了解泛型带来的好处:

// Release : code01, 2009/05/07
// Author : Anytao, http://www.anytao.com
public static void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
public static void Swap(ref string str1, ref string str2)
{
string temp = str1;
str1 = str2;
str2 = temp;
}

  以上两种算法分别实现了对整型、字符串型数据的交换,在泛型引入之前实现相同的交换算法需要分别为所有的类型构建相似的处理逻辑,这显然是一种代码上的浪费,而泛型特性彻底解决了这一问题:

// Release : code02, 2009/05/07
// Author : Anytao, http://www.anytao.com
public static void Swap<T>(ref T t1, ref T t2)
{
T temp = t1;
t1 = t2;
t2 = temp;
}

  对于不同的类型,在运行时以实际类型对T占位符进行替换,并转换为本地代码,彻底实现了灵活的类型抽象和算法重用。同时,除了代码级别的重用好处,泛型解决了类型转换、装箱与拆箱、类型安全等诸多问题,为程序设计带来巨大的变革。

  3.0,涅槃与重生

  C# 3.0是语言发展历史上的里程碑变革,就像凤凰涅槃一般为C#语言注入强大编程体验和活力,简洁、干净、富有意义,这些特性中主要包括:

  • 匿名类型
  • 自动属性
  • 对象初始化器
  • 集合初始化器
  • 隐式类型变量和隐式类型数组
  • 扩展方法
  • 查询表达式

  除此之外,C# 3.0的最大亮点就是LINQ(Language Integrated Query,语言集成查询),在CLR中集成类似于SQL式的数据查询能力,一种前所未有的函数式编程体验在面向对象语言中得以大展拳脚,这不得不说是C#带来的超酷体验。

  因为,本文并非一本讲述编程的教科书,所以我们无法在有限的篇幅来展现优雅的代码,只能取一瓢饮之,并通过简要的对比来领略3.0中的强大功能。以对象初始化器为例,在2.0时初始化对象成员,我们以这种方式实现:

User user = new User();
user.Name = "小王";
user.Age = 28;

  在3.0中,实现对象初始化有了更好的解决方案,由对象初始化器来完成:

User user = new User { Name = "小王", Age = 28 };

  同样的方式可以用来实现集合的初始化和隐式类型的初始化等。

  接着,我们再来了解一下自动属性带来的语法魅力,在3.0之前进行属性封装的是一件麻烦的事情,例如:

// Release : code03, 2009/05/07
// Author : Anytao, http://www.anytao.com
class User
{
private string name;
public string Name
{
get { return name; }
}

private int age;
public int Age
{
get { return age; }
set { age = value; }
}
}

  而自动属性将这一切化简为无形,语法简单而功能依旧:

// Release : code04, 2009/05/07
// Author : Anytao, http://www.anytao.com
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}

  这些所有的新特性最终都为了一个共同的目标而铺垫,这就是C# 3.0中最重量级的新特性:LINQ。所以,本文也不能少了对LINQ的讨论,在代码级别实现类似于SQL式的查询语法,以类型安全的通用方式完成增、删、改、查等数据操作的基本方式。只要数据源基于IEnumerable<T>接口而实现,那么不管是关系型数据、内存中集合还是XML都可以作为LINQ查询对象进行数据处理,这为面向对象语言实现函数式的编程体验创造了条件,一种全新的编程风格为编程体验刮来一股旋风:

// Release : code05, 2009/05/07
// Author : Anytao, http://www.anytao.com
public static void Main()
{
List<User> users = new List<User>
{
new User{Name = "小王", Age = 27},
new User{Name = "小张", Age = 29},
new User{Name = "小李", Age = 23}
};

IEnumerable<User> result = from user in users
where user.Age < 30
orderby user.Age descending
select user;

foreach (var user in result)
{
//执行操作
}
}

  你看,这种体验果然非同凡响,优雅而简单没有辜负Anders对于代码美学的追求。而作为编程用户,我们同样体味了这种理念在功能和结构上的双重精彩。

  参考文献

  (Web)http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

  (Web)http://weblogs.asp.net/podwysocki/archive/2008/05/24/what-is-the-future-of-c-anyways.aspx

  (Web)New features in C# 4.0

  (Web)http://msdn.microsoft.com/en-us/magazine/cc163340.aspx

  作者简介:

  王涛,网名Anytao,微软C# MVP,高级软件工程师,机械工程硕士,《你必须知道的.NET》一书作者,主要研究方向为.NET底层架构和企业级系统应用。现就职于某软件公司负责架构设计、软件开发和项目管理方面的工作。作者对.NET基础架构和CLR底层运行机制有浓厚的研究兴趣和造诣,熟悉ASP.NET、XML、WCF、SQL Server相关技术,对面向对象、设计模式和软件架构有一定的研究与实践经验。他的联系方式如下:http://www.cnblogs.com/Anytao

一起谈.NET技术,.NET十年(上)相关推荐

  1. 韦乐平在信息港论坛上谈电信技术发展趋势

    韦乐平在信息港论坛上谈电信技术发展趋势 http://www.sina.com.cn 2006年08月01日 09:34 中国信息产业网-人民邮电报   CNII网讯 被誉为通信信息业界"财 ...

  2. 《麻省理工科技评论》发布2019全球十大突破性技术 阿里巴巴成唯一上榜中国公司...

    2月28日,美国权威科学杂志<麻省理工科技评论>评选出2019年"全球十大突破性技术".阿里巴巴语音AI技术成功入选,阿里巴巴也是唯一上榜的中国科技公司. <麻省 ...

  3. 《麻省理工科技评论》发布2019全球十大突破性技术 阿里巴巴成唯一上榜中国公司

    2月28日,美国权威科学杂志<麻省理工科技评论>评选出2019年"全球十大突破性技术".阿里巴巴语音AI技术成功入选,阿里巴巴也是唯一上榜的中国科技公司. <麻省 ...

  4. 书影 | 管中窥豹,读《淘宝技术这十年》上

    这本书断断续续,竟然读过了一个新年的时间跨度.并非是要找借口,但自己的感觉:这种书其实读起来蛮累的,碎片化的时间加上作者东一耙,西一铲的叙述,还有以下两点: * 首先如果你把它当一本励志故事书来看的话 ...

  5. 智能车浅谈——抗干扰技术硬件篇

    文章目录 前言 干扰 什么是干扰 干扰窜入的主要途径 干扰的分类 硬件抗干扰技术 控制系统的电源保护技术 输入/输出传输线的抗干扰措施 I/O接口的抗干扰措施 接地技术 总结 智能车系列文章汇总 前言 ...

  6. 计算机辅助设计对提升产品质量,浅谈CAD技术与计算机辅助设计的应用

    浅谈CAD技术与计算机辅助设计的应用 来源:用户上传 作者: 杨思宇 [摘 要]随着社会经济的不断发展与进步,各领域的技术也不断的进行着革新.本文以计算机辅助设计当中的开发出的成组技术为主,对成组技术 ...

  7. 再谈P2P技术:网络拓扑结构、核心技术分析

    随着P2P应用的蓬勃发展,作为P2P应用中核心问题的发现技术除了遵循技术本身的逻辑以外,也受到某些技术的发展趋势.需求趋势的深刻影响. P2P协议概述 P2P打破了传统的Client/Server ( ...

  8. 浅谈BIM技术在“智慧工地”建设中的应用

    浅谈BIM技术在"智慧工地"建设中的应用 随着信息技术的不断发展,建筑行业的信息化程度不断提高,BIM技术在建设行业得到了广泛的推广和应用,同时,伴随着大数据时代的到来,智慧城市的 ...

  9. 模拟灯光JAVA_著名CG灯光大师谈灯光技术

    著名CG灯光大师谈灯光技术 当你准备照亮一个场景时,应注意下面几个问题: 一.场景中的环境是什么类型的? 场景灯光通常分为三种类型:自然光.人工光以及二者的结合. 具有代表性的自然光是太阳光.当使用自 ...

  10. 计算机在英语课堂的应用,浅谈信息化技术在英语课堂的应用

    浅谈信息化技术在英语课堂的应用 香洲区第一小学  李玉莲 摘 要:信息技术与课堂整合已经成为当代新课程改革的一个亮点,利用信息技术和网络资源可以丰富教学的内容和形式,现代信息技术给小学英语教学改革注入 ...

最新文章

  1. 如何设计一个牛逼的本地缓存!
  2. 预测性智能的力量:AI 和机器学习将如何改变美国政府决策?
  3. Device Tree(一):背景介绍
  4. React入门-9.redux你好
  5. 电脑常见故障排除_中央空调常见故障解析
  6. Install VMware tools 解决(物理主机WIN7X64和VM下的REHAT LINUX AS4共享文件)
  7. windows 内存管理的几种方式及其优缺点
  8. 浪点服务器芯片,浪点云服务器
  9. UWP ListView 绑定 单击 选中项 颜色
  10. 波卡二层扩容协议Plasm Network发布v1.7.0-dusty版本
  11. Paxos算法在大型系统中常见的应用场景
  12. Linux下C语言实现俄罗斯方块——详细版
  13. 985翻译硕士都在找的这款软件
  14. premiere pro 2020 pr 快捷键
  15. mac居家办公怎么连接公司内网,用tunnelblick
  16. Android 获取sim中带有字母的ccid(小白教程)
  17. Vmware Ubuntu虚拟机提示:无法连接虚拟设备 sata0:1,因为主机上没有相对应的设备,解决办法
  18. 《流浪地球》影评数据爬取分析
  19. 【企业数字化转型】中台战略
  20. 活性氧Propiconazole-d3 (nitrate),CAS No. 2699607-26-4

热门文章

  1. c语言中怎么画直线,ps如何画直线 【操作流程】
  2. Python数据挖掘课程 五.线性回归知识及预测糖尿病实例
  3. 漏洞分析---关于OpenSSL“心脏出血”漏洞的分析
  4. SAP-工艺路线相关的表的关联关系
  5. WPAN、WLAN、WMAN、WWAN无线通讯技术区别
  6. 久坐伤身,这个3D坐垫能让危害降到最低,办公自驾必备!
  7. iOS开发笔记之二十四——Xcode下类中供外部调用的方法添加注释说明技巧
  8. 用m1 pro的MacBook Pro,安装 Anaconda arm 图形版
  9. c#使用Aspose实现Word域套打
  10. python练习题--阿拉伯数字转换成中文数字