C# 3.0

davies 发表于 2005-9-16 09:53 | 分类: Programming ::

刚DotNet版看到有人贴了C# 3.0 的介绍,大概翻了一下,有不少惊喜,C#中引入了很多其他脚本语言的特性,越来越适合做快速开发,甚至原形开发。简要概括如下:

隐式局部变量申明 (Implicitly typed local variables)

就像JavaScript中那样 var i = 0, 以及 var s = "string" 等,它等效于 int i =0 和 string s="string" 。但不支持空类型,不支持动态类型,也不支持为初始化的隐士申明。这其实还是静态类型,并没有多大改善,只是在申明变量的时候,更"傻瓜"一点。像 Python这种完全动态类型的语言,使用起来非常爽,比如可以非常方便地将不同类型数据放在同一个数组或者集合中,但是会有不少潜在的问题,开发大型系统是就会不太合适。

扩展函数(Extension methods)

可以申明一个静态的函数,其第一个参数用this修饰,然后第一个参数类型的对象就可以把它当成员函数使用。比如有一个函数是 public static int Str2Int(this string s), 通常的使用方式是Str2Int("string")的样子,但现在可以用 "string".Str2Int() 的语法形式。这一点跟Python或者Ruby等语言非常类似。

匿名表达式 (Lambda expressions)

在要写一个非常小的函数暂时用时,还要去声明一个函数就不太合适,而匿名函数就可以很好的解决这样的问题,非常适合函数式的编程风格。C# 3.0 里也支持匿名表达式了,使用 => 操作符,左边是参数列表,右边是函数体,将一个函数在一行内完成。比如 x => x+1,相当于函数 int func(int x) { return x+1;},显然前者非常简洁直观。用匿名函数来操作数据集非常方便,比如 filter( list, x => x>5 ) 就可以把list中大于5的数提取出来。匿名函数在 Python 和 List等语言中都支持得很好。C# 中的匿名函数是delegate的延伸,它也是强类型的,比如定义Func<double, int> f = x => x + 1; 就是错的。

对象和集合初始化 (Object and collection initializers)

对象的初始化时可以显示地指明参数列表,比如 Point p = new Point{ X = 1, Y = 2}; ,这样写出来的代码可读性非常强。但不知道函数调用时能不能这样给参数赋值,在Python中是可以的。比如一个函数有10个参数,且都是可选的。加入我想给最后一个参数设定一个非默认值,若在C++中就必须把所与参数都提供,并且前面的9个都得是默认值。而在Python中,就可以在参数列表中直接指定给某个参数传递某个值,比如 open_html_page("http://blog.daviesliu.net/", proxy = "proxy.rainbud.net")。数组可以用列表的方式初始化,比如 List<int> list = new List<int> {1,2,3,4};

匿名类型 (Anonymous types)

类中的成员变量也可以是隐式申明的,在申明类时不用指定类型,其类型由初始化时的参数类型决定。这其实就相当于C++中的模版,每一个成员变量都有一个参数类型,当给定某种类型来得到实例时,就会实例化一个符合这种类型的类。这可以说是 C# 2.0 支持范型编程之后的又一次提升。C# 2.0 中的范型集合类叫 Generic Collections,比如上面举例所用的List<>。据说这种模版效率很高,甚至List<int>要高过自己实现的 IntList。

查询表达式 (Query expressions)

这是C# 3.0 非常有创意的一个地方,居然把查询数据库用的SQL语法继承到高级程序设计语言中来,这样以后开发数据库程序一定非常方便,有可能操作数据库就像操作本地变量一样方便。使用了 from where oderby select 等关键字。比如 from C in customers orderby C.Name where C.City="Beijing" select new { C.Name, C.Age } 就可以赛选出将在北京的客户,并按照名字排序,结果中只有名字和年龄两个字段。这样编程,是非常Cool的,不知道性能怎么样,应该不低。

C# 2.0 似乎还没有正式发布,居然 3.0 的规范就出来了,而且还有不少亮点,值得期待。可以看出,C# 3.0 借鉴了不少脚本语言的特点,比如Python,或许微软从开源社区挖来了不少高手来设计C#。

转载于:https://www.cnblogs.com/GeneralXU/archive/2007/03/23/685662.html

微软热门知识点之------c#3.0新特性【转】相关推荐

  1. WCF4.0新特性体验(9):非破坏性队列消息接收(Non-destructive queue receive )

    这次来介绍一下WCF4.0新特性体验(9):非破坏性队列接收(Non-destructive queue receive ).这个特性不是那么直观.确切来说是WCF4.0对于以前处理MSMQ消息队列机 ...

  2. C# 3.0 新特性

    http://developer.51cto.com/art/200908/148353.htm 在发布Visual Studio 2005和C#2.0之后,微软公司又马不停蹄的展示了人们所期望的C# ...

  3. Android5.0,6.0,7.0,8.0新特性整理

    背景 Android5.0(Android Lollipop)是谷歌公司2014年10月发布的全新安卓系统,至今已经两年多.然而由于国产手机对安卓ROM的深度定制或修改,以及手机厂商.芯片制造商.运营 ...

  4. mysql is双竖线_MySQL 5.0 新特性教程 存储过程:第二讲

    MySQL 5.0 新特性教程 存储过程:第二讲推荐查看本文HTML版本 什么样的SQL语句在Mysql存储过程中才是合法的呢?你可以创建一个包含INSERT, UPDATE,DELETE, SELE ...

  5. Android5.0,6.0,7.0新特性整理

    背景 Android5.0(Android Lollipop)是谷歌公司2014年10月发布的全新安卓系统,至今已经两年多.然而由于国产手机对安卓ROM的深度定制或修改,以及手机厂商.芯片制造商.运营 ...

  6. Android5.0 6.0 7.0新特性

    原文链接:http://blog.csdn.net/haovip123/article/details/54618642 背景 Android5.0(Android Lollipop)是谷歌公司201 ...

  7. JDK5.0新特性系列---目录

    JDK5.0新特性系列---目录 JDK5.0新特性系列---1.自动装箱和拆箱 JDK5.0新特性系列---2.新的for循环 JDK5.0新特性系列---3.枚举类型 JDK5.0新特性系列--- ...

  8. [转]C# 2.0新特性与C# 3.5新特性

    C# 2.0新特性与C# 3.5新特性 一.C# 2.0 新特性: 1.泛型List<MyObject> obj_list=new List(); obj_list.Add(new MyO ...

  9. Servlet 3.0 新特性概述

    Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...

最新文章

  1. #39;git pull#39;和#39;git fetch#39;有什么区别?
  2. dao层通用封装_DAO层–救援通用
  3. WebStrom Sass 编译配置 windows
  4. Android项目实战(二十二):启动另一个APP or 重启本APP
  5. 记录ionic 最小化应用时所遇的问题
  6. IntelliJ IDEA 2020.1 瞬间定位文件夹、文件
  7. 【Elasticsearch】中文分词器比对表
  8. 自动驾驶感知-车道线系列(二)——Canny边缘检测
  9. linux各个目录作用详解,linux各个目录作用
  10. fedora 19 安装中文语言包
  11. 房屋租赁管理系统(Java源码+论文)
  12. 注意:CISSP考试重考政策更新
  13. 计算机解释英文缩写x,计算机组成原理英文缩写解释
  14. hbuilder如何设置图片居中显示_hbuilder合并单元格
  15. 远程监控养猪监控系统
  16. 刷入Magisk/SuperSU实现ROOT
  17. python双人对决小游戏
  18. 将vscode打造为jetbrains主题
  19. css分块代码,30 Seconds of CSS代码块解读(视觉篇)
  20. 淘宝总知道你要什么?万字讲述智能内容生成实践 | 技术头条

热门文章

  1. 某计算机系大二级共有5个班,2016年计算机二级考试MS Office题库及答案
  2. 计算机开始按钮作用,Win8.1的12个变化:开始按钮回归功能不再
  3. KVM中virtio、vhost 和vhost-user比较(十一)
  4. leetcode算法题--最小路径和
  5. oracle管理 题库,Oracle数据库管理与开发习题集
  6. js_高级_面向对象编程案例---理解面向对象编程思想很重要
  7. 【hiho】38 二分·二分答案【二分答案】
  8. [Spark][Flume]Flume 启动例子
  9. 端产品多版本共存服务器端兼容的问题
  10. Docker学习笔记之二,基于Dockerfile搭建JAVA Tomcat运行环境