详细介绍C 详细介绍春节习俗
创始人
2024-04-28 13:30:15
0

一.C#3.5新特性-var关键字

关键字var,是否让您想起了JavaScript中的定义变量的关键字var?事实上,这两个看似相同的关键字却有本质上的区别。而这个var关键字并非在C#3.5中才出现的,它在C#3.0中便已经存在,之所以在此介绍它,是因为要介绍3.5,必须而且应该去介绍一下这个在C#3.0中便出现的特性--本地类型推断(Local Type Reference)。

在C#2.0及其以前的版本中,如若定义一可以向其赋任何值的变量,那么我们需对其以object关键字进行定义,这种变量需要对值类型的进行装箱操作而且在对该变量使用的时候还需要进行相应的拆箱操作,而这种装箱拆箱所耗费的资源实在是笔者所不愿意看到的。

那么,我们既不愿意编写无谓耗费资源的代码,又想去实现object定义变量实现的功能,怎么办?C#3.5为我们提供了一种变量定义方式:

  1. var intTest = 5;  
  2. var customer = new Customer(); 

看上面的变量定义,其实这就是C#3.5为我们提供的一种新功能--本地类型推断,它可以保护类型安全,而且允许您编写更为"自由"的代码。也就是说,我们可以不去考虑变量的类型而直接以var关键字去修饰它,编译器能够从给变量赋值的表达式中智能推断出变量的类型。它和COM模型中的Variant关键字定义出的变量完全不同,COM中的Variant关键字是变量晚绑定的一种方式,在编译期没有检测,仅在代码运行时才会出现它自身存在的问题,而且一不小心就会出现一大堆令人讨厌的Bug。而C#中这个var定义的变量在编译期推断出它的类型,并且编译后的IL代码中只包含推断出的类型。

即上面的两行代码完全等同物如下代码:

  1. var intTest = 5;  
  2. Customer customer = new Customer(); 

事实上,var关键字不仅仅能够实现我们如上所述的功能,它会成为你在使用C#3.5进行编程时非常熟悉的一个朋友,记住这个"匿名类型(Anonymous Type)",也记住这个"本地类型推断(Local Type Reference)"。

二.C#3.5新特性-自动属性(Automatic Properties)

还记得我们在C#1.1和C#2.0写类的属性时定义的那个小小的私有变量么?甚至有些人还因为私有变量是否应该和属性定义在一起而展开了争论。那么,现行社会流行的"减肥"这个词也可以应用到我们的程序代码上来。

C#3.5为我们提供了自动属性(Automatic Properties),看如下代码:

  1. var intTest = 5;  
  2. var customer = new Customer(); 

get和set关键字均没有我们以前所熟悉的return value;和_privateField=value;这样的字眼。事实上,这就是善解人意的编译器为我们提供的又一项新功能--自动属性。编译器会为我们定义的Name属性自动生成一私有变量来保存其值。于是,我们原来需要至少三行才能完成的代码现在仅需一行便轻松完成了。


不过,它有自身的局限性,比如说不能在用自动属性定义的属性中加逻辑判断,get和set必须成对出现等。然而,笔者相信并非我们所有的属性均要加上逻辑判断吧?那么,就请去尝试自动属性为我们带来的便利


三.C#3.5新特性-lambda表达式

习惯C#编程的您在C#2.0及其以前见到过"=>" 这个符号么?这又是一新特性,我们可以将它读作"lambda表达式"。

C# 2.0 通用使用匿名方法引入了"传递指针到特定代码"作为参数的功能。这是一个功能强大的概念,但是这种方式您实际传递的是方法的一个指针,而不是代码块。那个引用指向编译时生成的强类型代码。使用泛型,您可获得更大灵活性,但是对泛型类型难以应用标准操作符 。C# 3.0 引入 lambda 表达式,它允许使用更简练的语法来定义匿名方法。

看如下代码片断:

  1. IEnumerbleHezeCstomers = customers 
  2. wheren(c =>.Address == City.here  
  3. Select(c =>C);l 

且不说其他部分意义,单来看我们.Where括号之中的部分,c=>c.Address==City.Heze这段代码,我们可以将它理解为,给定 c,返回c.Address==City.Heze的记录集,此处就是lambda表达式的应用之一,我们将在以后的文章介绍,以上是介绍3个C#3.5新特性。

【编辑推荐】

  1. 概述C#实现文件下载
  2. C#搞定网站验证码的方法
  3. 浅谈C# String对象
  4. C#命名空间学习笔记
  5. 浅析C#调用ActiveX控件

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...