C# 3.0的新特性

  • 自动属性.

    • 之前定义属性的步骤: private filed + public property.
    • 现在的形式:int id{get;set;}.
    • 可以分别设置get/set的保护级别(protected/public/private/internal).
    • 系统自动生成一个private的字段,并暴露响应的get/set访问器.
    • 对于Property内定义操作的限定
      • 应该能够立即返回.不能把Timer的操作定义在其内.
  • 匿名类型var
    • var声明仅限于局部变量,不能用于字段上.
    • 编译器根据初始化语句来自动推测变量的类型.一旦类型确定后,不能改变它.
    • 初始化语句必须为表达式,不可为空.且编译时就能够完成类型推断.
  • 匿名类型
    • 普通的Type=Data+Operation组成.
    • 对于一个只需要Data的类型.使用InLine的方式创建一个匿名类型,其只含有Data成员.
    • 编译器会自动创建匿名类型的Class.并且在同一Assembly内,相同数据结构的匿名类型共享同一Class.
    • 匿名类型无法作为方法的参数.
    • 自动生成的Class继承自Object.其成员是由编译器推断出的get/set属性.
    • 数组的形式new[]{,,,,,}.
    • 在Linq中,编译器就使用了匿名类型来对查询结果的数据进行保存.
  • 对象/集合初始化器
    • 对象初始化器的过程:调用Class的构造器创建一个临时对象,然后根据{}内的赋值语句对临时对象的Field/Property进行赋值.然后将临时对象返回.
    • 集合初始化器.将集合对象的创建和对元素的初始化合一.
  • 扩展方法
    • 之前需要扩展CLR类型时.要么创建Helper类,要么继承该类型.
    • 类似于JS中的prototype.实现了对duck typing的支持.
    • 扩展方法是可以通过实例方法语法调用的静态方法.仅可以声明在静态类中.
    • 其本质是将实例方法调用在编译期改变为静态类中的静态方法调用.
    • 作用域是namespace.
    • 在IL Code级别,扩展方法被自动加上了[ExtensionMethod]特性.编译器在对方法调用进行编译时,首先查找Type Method.如果没有再查找ExtensionMethod.
    • 在Linq中,System.query就是对IEnumable<T>增加了select/foreach等扩展方法.
  • Lamada表达式
    • 实质是匿名Delegate.命名Delegate,匿名Delegate,Lamada表达式3者没有区别.
    • 编译器为它生成一个Named Delegate,和一个指向它的Method.然后这两者作为使用该lamada表达式的Class内的Static method.
    • lamada表达式L可以转换为委托类型D,只要满足两者的参数签名完全一致.
    • 可以把一个方法作为另一方法的参数.在linq中where(p=>{}).
  • Lamada表达式树
    • 像处理数据(读取,修改)一样了处理lamada表达式.
    • 内存中的分层次的数据表示,每一个节点都是查询的一部分.以数据结构来描述执行代码.

C# 3.0的新特性

时间: 2024-10-07 00:44:23

C# 3.0的新特性的相关文章

Atitit jquery &#160;1.4--v1.11 &#160;v1.12 &#160;v2.0 &#160;3.0 的新特性

Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性 1.1. Jquery1.12  jQuery 2.2 和 1.12 新版本发布 - OPEN资讯.html   2016.11 1.1.1. jQuery.htmlPrefilter()1 1.2. 2016.7  jq3.0 新特性1 1.3. Jq3.1新特性 jQuery 3.1.1 发布了,该版本包括一些 BUG 修复和改进.3 1.1. Jquery1.12  jQuery 2.2 和

相比于python2.6,python3.0的新特性。

这篇文章主要介绍了相比于python2.6,python3.0的新特性.更详细的介绍请参见python3.0的文档. Common Stumbling Blocks 本段简单的列出容易使人出错的变动. print语句被print()函数取代了,可以使用关键字参数来替代老的print特殊语法.例如: Old: print "The answer is", 2*2 New: print("The answer is", 2*2) Old: print x,       

C# 6.0语法新特性体验(二)

之前我在文章通过Roslyn体验C# 6.0的新语法中介绍了一些C# 6.0的语法特性,现在随着Visual Studio 14 CTP3的发布,又陆续可以体验一些新的特性了,这里简单的介绍一下之前没有介绍的新语法. 属性表达式(Property Expressions) 我们常常会在类中写一些通过函数生成的只读属性: ????class Point????{????????public int X { get; set; }????????public int Y { get; set; }

在Visual Studio 14 CTP中启用C# 6.0的新特性

今天看到Visual Studio 14 CTP版本已经发布了,支持了一些c++ 及C# 6.0的新特性,便下载下了尝鲜试了一下. C++到还好,使用C#的新特性就有点麻烦了,需要在csproj文件中加上这样一行才能使用     <LangVersion>experimental</LangVersion> 最开始我想写个VS插件来弄下.试了下找不到啥相关的API,便改写了一个小程序来转换它,使用了后还是觉得但文件太多时候很麻烦. 就干脆写了一个小程序把所有的模板中都添加了这一项,

安卓6.0(棉花糖)新特性汇总

安卓6.0(棉花糖)新特性汇总 Android伴随着众多新特性和新功能,Android6.0(API level 23)在系统和API上都有着诸多的改变. 1.App Permissions(软件权限管理) 在安卓6.0里,应用许可提示可以自定义了.它允许对应用的权限进行高度管理,比如应用能否使用位置.相机.麦克风.通讯录等,这些都可以开放给开发者和用户. 作为开发者,当你的app的目标版本(target)为Android6.0(API 23)或更高时,请确保在运行时进行权限的检查和请求.其中,

OSChina 技术周刊第二十四期 —— C# 6.0 的新特性

每周技术抢先看,总有你想要的! 移动开发 [博客]Swift社交应用文本输入优化汇总 服务端开发/管理 [翻译]HTTP/1 的最佳实践并不适合 HTTP/2 [翻译]使用 AppDomain 存储实现大数据集合 [翻译]AngularJS 对比 React [软件]PHP 论坛软件 PHPHub [软件]监控和告警系统 Bosun [软件]多主机容器网络 SocketPlane [博客]Django学习笔记 [博客]Tornado源码分析-Web Framework [博客]话说对 Hiber

servlet3.0 的新特性之二注解代替了web.xml配置文件

servlet3.0 的新特性: 注解代替了 web.xml 文件 支持了对异步的处理 对上传文件的支持 1.注解代替了配置文件 1.删除了web.xml 文件 2. 在Servlet类上添加@WebServlet(urlPatterns={"/AServlet"}) 3. 在Filter类上添加@WebFilter(urlPatterns="/AFilter") 4. 在Listener类上添加@WebListener ? 总结: * 注解好处:配置信息少,使用很

C# 6.0/7.0 的新特性

转眼C#语言都已经迭代到7.0版本了,很多小伙伴都已经把C# 7.0 的新特性应用到代码中了,想想自己连6.0的新特性都还很少使用,今天特意搜集了一下6.0和7.0的一些新特性,记录一下,方便查阅. C# 7.0 新特性 增强的ref 可以对值变量传递引用 ref int b = ref a; 可以对返回值返回引用 return ref x; 自动创建 out 变量 增强的元组(需要扩展包支持,Install-Package System.ValueTuple) 命名返回值 (int a, in

探秘C# 6.0 的新特性

C# 6.0 中的新特性 我们可以对这些新特性一个一个的进行讨论,而首先要列出 C# 6.0 中这些特性的一个清单 自动的属性初始化器 Auto Property Initializer 主构造器 Primary Consturctor 字典初始化器 Dictionary Initializer 声明表达式 Declaration Expression 静态的Using Static Using catch 块中的 await 异常过滤器 Exception Filter 用于检查NULL值的条