zoukankan      html  css  js  c++  java
  • C#3.0新特性

    术步伐实在太快,我怕我是跟不上了,出来很久才有空关注一下。
    暂且记录下我对C#3.0的一知半解吧,或许底下可以直接去学C#4.0了,呵呵

    其实也不是特定冲着C#3.0去的,而是.net3.0,但关于C#3.0的新特性同一篇文章被转载的铺天盖地,就被岔开了,没看到.net3.0的什么特点,倒是被C#3.0吸引住了,这些新特性怎么越来越像javascript了?

    (1)用var声明变量
    js里是用var声明变量,但两者不同的是,js里的变量没有类型,数据才有类型,可以将一个变量指向任意的数据类型而运行自如。
    而C#3.0里在用var声明变量时必须对其进行初始化,这样编译器能够根据初始化的值知道该变量的类型,将部分程序员要写的代码交给编译器去完成。就是说每个变量的类型还是固定的。
    例如在C#3.0里可以这样直接声明并初始化变量:

    var tbTitle=new System.Web.UI.WebControls.TextBox();

    的确省写了很多代码,呵呵。但是,如果你想把变量声明和初始化分开,那var关键字就无能为力了。

    (2)直接构建对象
    js里创建对象的快捷途径一直令我很happy,例如:

    var book={title:'bookTitle', author:'nate', id:222};

    现在C#3.0竟也有类似的语法了:

    var book=new {title="bookTitle", author="nate", id=222};

    其实也是由编译器做了更多的工作,在背后自己定义了一个类,更多的原理解释大家自己google吧。

    (3)扩展方法
    js里给一个类扩展方法也就是给prototype原型对象添加一个方法,非常方便。
    现在C#3.0也提供了类似的功能,虽然偶觉得这个新特性可能太灵活了以至影响C#的严谨性甚至软件架构方面的问题,但是无疑这还是很吸引人的:

    public static ToInt32(this String s){
     return Convert.ToInt32();
    }

    在任意一个类中定义上述静态方法,那么你的string对象就有直接的ToInt32方法了,是不是很方便?

    (4)创建对象时同时进行初始化
    同样是提供了一种简洁的语法来初始化一个对象,例如:

    public class Point{
     public int x;
     public int y;
    }

    可以这样实例化:

    var point=new Point{x=100,y=200};

    这样可以少些多少构造函数啊,呵呵

    (5)方便声明集合对象
    以前对于数组可以直接声明时初始化:

    string[] s=new string[]{"red","blue","black","white"};

    而对于ArrayList这样的集合类型却没有简洁的语法,只能通过Add之类的方法逐一添加,
    而在C#3.0中,所有实现ICollection接口的类都有了简洁的初始化语法:

    var alColors=new ArrayList{"red","blue","black","white"};

    (6)Lambda表达式
    尽管委托作为C#最新引入的一个概念非常优秀,它也是事件机制的基础。但用起来却很麻烦,相信每个写过的人都有体会,现在C#3.0通过Lambda表达式简化了这个过程。
    Lambda表达式的关键特征是将表达式或者语句块作为参数,通过=>来直接定义一个委托,这个委托的类型会根据一系列的转换规则,由编译器决定,例如:

    DemoDelegate myDelegate = ( ) => Console.WriteLine( "Hiya!!" ) ;

    这里的()表示一个空参数的函数,后面的Console.WriteLine("Hiya!!");是函数体。这样就很方便的实现了委托的定义,大家不妨回忆一下在C#1.1和C#2.0中是如何的麻烦,呵呵。
    Lambda表达式不是那么容易理解,更多信息可以参见C#3.0的语言规范:
    http://news.csdn.net/news/newstopic/26/26742.shtml

    (7)查询表达式
    虽然我对Ruby了解不多,但总感觉针对集合的查询,直接在语言中体现,这种灵感来源于Ruby。
    于是C#3.0又多了一项诱人的特性,可以通过类似Sql语句的方式来获得需要的数据,结果可能存储于一个集合对象中或其他。
    同样,没有能力三言两语将其说清楚,参见规范:

  • 相关阅读:
    Python 3.6安装yaml时报"AttributeError: module 'pip' has no attribute 'main'"和“Non-zero exit code”错误
    Python 3.6版本中实现 HTMLTestRunner输出时”fp=file(filename,'wb')“报错
    LoadRunner录制脚本时没有响应——无法启动浏览器问题总结
    python中print不换行
    python中for循环的三种遍历方式
    python enumerate用法
    Python中添加中文注释报错SyntaxError: Non-UTF-8 code starting with 'xc1'
    pycharm 2017最新激活码
    设计模式之禅2之六大原则
    hibernate错误整理
  • 原文地址:https://www.cnblogs.com/lds85930/p/915381.html
Copyright © 2011-2022 走看看