Csharp4.0与以往版本基础体现了强大的性能优势,主要体现在以下四个方面:

  1. 通过委托成员来实现接口

  在C# 4.0中可以通过委托来实现某个成员的接口,例如下面的代码:

public class Foo : IList
  {
  private List _Collection implements IList;
  public Foo()
  {
  _Collection = new List();
  }
  }

  被封闭的成员可以用委托实现一个或多个接口,多个接口用逗号分隔。这么做可以去掉很多冗余的代码,就像上面的示例,不再需要在封闭类(Foo类)上写一大堆方法来将接口实现交给成员变量,接口的实现会直接映射到受委托的接口实现(_Collection成员变量)。这个功能同样增强了对minxins的支持。

  这个就是“委托模式”了,wikipedia上对此模式的解释如下:

  委托模式是指一个对象对外表现某种行为,但事实上只是将实现此行为的任务将会给一个相关的成员的技术,这种技术反转了责任。委托模式是加强组合 (聚合)、minxins及aspects的一种基本模式。

  再进一步,在委托实现接口之余,我们也应当可以自由地重写某些方法如下:

public class Foo : IList
  {
  private List _Collection { get; set; } implements IList;
  public Foo()
  {
  _Collection = new List();
  }
  //这将覆盖委托的执行
  // 漂亮的混入和方便的功能
pattern implementation
  public int IList.Add(string value)
  {
   if (!_Collection.Contains(value))
   _Collection.Add(value);
  }
  }

  2. 匿名返回类型

  在C#中匿名类型可以拥有像普通的类声明一样的地位。(当前)匿名类型只能用于局部变量,不能作为方法的返回值。但是如果一个强类型的LINQ查询的返回类型可以作为方法的返回类型一定很好,比如下面的代码:

public var GetProductInfos()
  {
   var productInfos =
   from p in products
   select new { p.ProductName, p.Category, Price = p.UnitPrice };
   return productInfos;
  }

  3. 一些 Duck-typing or Structural Subtyping 类型的支持

  如果一个类中的某一个方法/属性的签名和某个接口一样,并且这个类没有实现此接口,那么这个类就将隐式地实现这个接口。只有这个类实现了接口规定的所有方法/属性的时候才被认为隐式地实现了此接口。

  如果这东西走起来像鸭子,晃起来像鸭子,那么这就是鸭子!(James Riley)

  那么这个和Structural Subtyping有什么区别?我承认structural subtyping更适合C#的静态样式,所以这是个'static duck typing',或者如wikipedia所述:

  Duck typing与structural typing的区别仅在于类型中被访问的部分在运行期才做兼容性确认。

  我们将通过一个用例来说明这种方法有什么好处:

  在.NET框架中,一部分控件实现了一个叫ReadOnly的属性,比如TextBox, DataGrid, NumericUpDown

现在我们建一个叫IReadOnlyRestricable的接口:

public interface IReadOnlyRestricable
  {
   bool ReadOnly { get; set; }
  }

  然后我们要遍历所有的控件,找出有ReadOnly属性的控件并把此属性设为true(译者注:这些控件本身没有实现IReadOnlyRestricable),在ducktyping下我们可以把控件通过类型转换为IReadOnlyRestricable,就像下面代码一样,这样我们就不需要通过反射去定位ReadOnly属性了:

foreach (Control c in f.Controls)
  {
   //希望有隐式转换
IReadOnlyRestrictable if interface contract is in class we are checking against
   IReadOnlyRestricable editable = c as IReadOnlyRestricable;
   if (editable != null)
   editable.ReadOnly = true;
  }

  ducktyping的最大好处是可以为你不需要访问的类库定义一些接口,这可以尽可能地减少相互依赖,你可以查看Phil Haacks more extensive post on duck typing这文章来看看为什么作者相信这对C#有好处。

  Krzysztof Cwalina认为,很显然的,C#的foreach关键字已经使用了duck typing.

  4. 安全的null延迟赋值操作符

  我很想看到一种安全访问一个值为null的对象属性的表达式,表达式可能形如Object.Property.Property.Value

比如我要访问Customer?.FirstName,但是Customer是null,此时Customer?.FirstName会返回null而不是抛出个NullReferenceException

  再看看下面的代码:

//如果不是客户或命令无效,这将抛出一个像往常一样空引用异常
int orderNumber = Customer.Order.OrderNumber;
//这将无法编译,因为它需要一个空的返回类型  
int orderNumber = Customer.Order?.OrderNumber;
//这将返回null,如果客户是空或者如果命令是空  
int? orderNumber = Customer?.Order?.OrderNumber;
if (orderNumber.HasValue)
//... 用它做一些事情
//而不是必须做
if ((Customer != null) && (Customer.Order != null))
int a = Customer.Order.OrderNumber

转载于:https://www.cnblogs.com/waw/archive/2011/08/29/2158593.html

一起谈.NET技术,基于Visual Studio 2010 阐述C#4个特性相关推荐

  1. 一起谈.NET技术,Visual Studio 2010 中的代码约定设置

    软件约定称为代码约定,通过这一约定可以表示代码正常工作所需的正式条件. 如果方法未按预期收到数据或生成的数据不符合预期的后置条件,代码约定将导致代码引发异常. 有关前置条件和后置条件的概述,您可能需要 ...

  2. 一起谈.NET技术,Visual Studio与C#编程十个实用技巧

    如果你通过搜索引擎发现这篇文章的,我建议你先看看本系列的第一篇,这是本系列文章的第二篇,今天为大家带来更丰富的C#和Visual Studio编程技巧,一起来看看吧. 1.DataTable.HasR ...

  3. 一起谈.NET技术,Visual Studio自定义调试窗体两个小技巧

    本文翻译:Few Tips on Customizing Debugging Window View in Visual Studio . 使用DebuggerBrowsable特性可以自定义调试窗体 ...

  4. Visual Studio 2010 Ultimate敏捷之道:特性解析

    随着软件开发日趋国际化,对软件的质量要求和管理也随之增高.微软看到了应用程序生命周期管理在业界逐渐被接受认可的趋势,并宣称VSTS2010将会是一个革命性的.Net软件开发以及管理工具的产品,预计在2 ...

  5. OpenCV | 基于visual studio 2010版本的OpenCV3.0.0配置文件

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 基于PX4FLOW光流传感器的四旋 ...

  6. 一起谈.NET技术,Visual Studio对程序集签名时一个很不好用的地方

    由于我们的项目底层使用到一个通过LogicalCallContext实现的上下文数据管理框架,导致所有的Unit Test不能正常运行.具体的现象在<只在UnitTest和WebHost中的出现 ...

  7. 基于 VS 2010 阐述C# 4个特性

    基于 VS 2010 阐述C# 4个特性基于 VS 2010 阐述C# 4个特性 买空间.服务器就上主机网(CNIDC.COM) 虚拟主机评测+IDC导航=IDC123.COM. 基于Visual S ...

  8. linux c 并行编程从入门到精通,VISUAL STUDIO 2010并行编程从入门到精通(微软技术丛书)...

    摘要: <微软技术丛书:Visual Studio2010并行编程从入门到精通>循序渐进,步骤式动手练习迅速帮助读者掌握并行编程的基础知识. <微软技术丛书:Visual Studi ...

  9. 微软MSDN中文网络广播(Webcast)——Visual Studio 2010 ALM应用实践系列课程预告(2011)...

    Visual Studio 2010 & ALM应用实践系列课程:(将在2011年3月前录制完成) 本系列课程较完整的覆盖了基于Visual Studio 2010 & ALM来进行软 ...

  10. Visual Studio 2010 Ultimate敏捷功能特性(下)

    2.开发与测试的敏捷特性(开发和测试人员) 在测试方面,VSTS 2010强化了测试功能,同时简化了在整个应用程序生命周期中整合测试的工具.新功能包括快速进行有关测试的设计与开发.测试用例管理,与Te ...

最新文章

  1. spring-boot入门之二——验证、AOP日志、异常处理
  2. Spring boot 启动后执行特定的操作
  3. Mysql 生成不重复的随机数字
  4. Visual Studio下包含多项目的解决方案及项目间引用
  5. c语言 fopen、fwrite、fread、fclose函数(打开文件进行读写覆盖或追加)
  6. Beautifulsoup的使用
  7. java生产者消费者问题代码分析
  8. python如何在exel中编程_如何使用Python以编程方式将行添加到现有Excel表中
  9. filter滤镜实现img图片的CSS蒙版效果、模糊效果
  10. 提升大数据可视化的技巧有哪些
  11. 【mysql】Filesort on too many rows解决方法
  12. linux 中压缩文件夹命令行,Linux 文件夹 压缩 命令
  13. js实现-别踩白块儿-类
  14. app推广渠道数据统计Xintall
  15. 怎么样通过API函数获取tooltip的内容(请高手帮忙)
  16. 如何降低计算机版本,电脑系统WIN10如何降级,还原老系统_win10专业版教程
  17. 【高效办公】五、windows通过SSH连接另一台电脑虚拟机中的ubuntu详细教程
  18. jquery attr设置属性失效问题
  19. 【程序】STM32H743ZI单片机驱动DP83848以太网PHY芯片,移植lwip 2.1.3协议栈,并加入网线热插拔检测的功能
  20. 小悦悦事件,18路人视而不见,不只是道德问题

热门文章

  1. 学习python:模块的建立与发布
  2. 学会这两个技巧!让你的Mac文件共享超简单
  3. 苹果 macOS Big Sur 11.2.3 正式版发布
  4. 数据库查询性能优化之利器—索引(一)
  5. ID3DXMesh接口 创建自己的立方体网格
  6. HDU 4009 不定根最小树形图
  7. python 守护进程(daemon)on : 会打扮的装饰器
  8. Max Points on a Line@LeetCode
  9. PHP中的unset的使用问题
  10. inDesign教程,如何在文档中添加链接和动画?