引言

关于C#3.0的特性,园子里已经有了一大把,可能大家都很熟悉了,虽然本人开发中使用过,但自己还是需要记录一下,总结一下。同时也是后面写Linq知识的基础。希望有兴趣的朋友,可以看看。

C# 3.0新语言特性和改进包括:

  • 自动属性
  • 隐含类型局部变量
  • 匿名类型
  • 对象与集合初始化器
  • 扩展方法
  • Lambda表达式和Lambda表达式树

1. 自动属性

自动属性可以避免我们编写实体类时声明私有变量和get/set的逻辑,取而代之的是,编译器会自动为你生成一个私有变量和默认的get/set 操作。

在.Net2.0中我们这样定义一个Product类。

public class Prodcut{private string _productid;public string Productid{get { return _productid; }set { _productid = value; }}private string _prodcutname;public string Prodcutname{get { return _prodcutname; }set { _prodcutname = value; }}}

自动属性写法:

    public class Prodcut{public string _productid { get; set; }public string _prodcutname { get; set; }}

像上面空的get/set属性的话,类中会自动生成一个成员变量和公开的get/set,也可以分别设置get/set的访问级别,如下

    public class Prodcut{public string _productid { get; private set; }public string _prodcutname { private get; set; }}

2. 隐含类型局部变量

C# 3.0中引进了新的关键字var,在声明局部变量时可用于替代原先的类型名,那么这个声明被视作隐式类型局部变量声明。

var i = 5;
var j = "Hello World";
var k = 50.36;
var x;  //错误
var y = null;  //错误
var z = { 1, 2, 3 };  //错误

去掉错误代码,我们调试状态下,查看数据类型

隐含类型局部变量要点:

  • var局部变量必须初始化。
  • var关键字可以指示编译器通过右侧的初始化部分来推断实际的数据类型。
  • 在编译时表达式的类型不能为null类型。
  • 初始化语句可以是表达式,不可以为空,且编译可以判断类型,一旦初始化后,只可以存储这种类型。
  • var 只可以声明局部变量,不可以是全局的,同时也可以用于foreach、for、Using等语句中。
  • 初始化话不能是自身对象和或者集合初始化器,但是可以包含一个对象或者初始化器的一个new表达式。

3.匿名类型

1. 什么是匿名类型?

匿名类型,顾名思义就是没有名字(表面看不到,类名由编译器自动产生)的类型。

2. 匿名类型的作用?

当需要定义类来封装一些相关数据,而不需要任何相关联的方法、事件,而且这个类不需要在项目中重用时,我们也可考虑使用匿名类型来简化我们的操作。

3. 用法

 var User = new { Name = "swich", Url = "http://www.cnblogs.com/liujie2272" };

上面匿名类型,编辑会认为User相当于:

 public class User{public string Name { get; set; }public string Url { get; set; }}

数组匿名类型:

 var array = new[] { new { Name = "ZhangSan", Age = 26 }, new { Name = "LiSi", Age = 25 } };

匿名类型要点:

  • 可以使用new关键字调用匿名对象创建匿名对象。
  • 匿名类型继承自System.Object。
  • 匿名类型的类型由编译器根据初始化器推断而来的一些读写属性。

4.对象与集合初始化器

1. 对象初始化器

在.Net 2.0中非常依赖属性,当生成对象实例和使用对象时,我们是这样写的:

 User user = new User();user.Name = "swich";user.Url = "http://www.cnblogs.com/liujie2272";

而在.Net 3.0中,对象初始化器由一系列成员对象组成,其对象必须初始化,用逗号间隔,使用{}封闭。我们可以这么写:

User User = new User { Name = "swich", Url = "http://www.cnblogs.com/liujie2272" };

  List<User> list = new List<User>{new User { Name = "swich", Url = "http://www.cnblogs.com/liujie2272" },new User { Name = "swich", Url = "http://www.cnblogs.com/liujie2272" }};

2. 集合初始化器

集合初始化器由一系列集合对象组成,用逗号间隔,使用{}封闭。

List<int> sum= new List<int> { 11,21,31,41,51};

转载于:https://www.cnblogs.com/liujie2272/p/5533683.html

C# 3.0新语言特性和改进(一)相关推荐

  1. LINQ体验(2)——C# 3.0新语言特性和改进(上篇)

    整体来说.Visual Studio 2008和.NET 3.5是建立在.NET2.0核心的基础之上,.NET2.0核心本身将不再变化(假设不了解.NET2.0的朋友,请參看MSDN或者一些经典的书籍 ...

  2. C# 3.0新语言特性和改进

    体来说,Visual Studio 2008和.NET 3.5是建立在.NET2.0核心的基础之上,.NET2.0核心本身将不再变化(如果不了解.NET2.0的朋友,请参看MSDN或者一些经典的书籍) ...

  3. Netty 4.0 新的特性及需要注意的地方

    Netty 4.0 新的特性及需要注意的地方 这篇文章和你一起过下Netty的主发行版本的一些显著的改变和新特性,让你在把你的应用程序转换到新版本的时候有个概念. 项目结构改变 Netty的包名从or ...

  4. android 4.0新的特性(针对开发者)

    Android 4.0 是一次重要的平台发布版,为用户和应用程序开发者增加了大量的新特性.在下面我们将讨论的所有新特性和API中,因为它将 Android 3.x 版本中广泛使用的API和全息图像主题 ...

  5. c 11 主要的新语言特性,C 11系列

    什么是C++0x? C++0x是C++最新标准标准化过程中的曾用名,在这一系列文章中我们将介绍最新标准添加的一系列新的语言特性.在2011年9月份,C++0x正式由官方发布并命名C++11,现在很多编 ...

  6. c 11 主要的新语言特性,关于c ++ 11:有没有办法确定C ++编译器实现的语言特性?...

    不同的C ++编译器在不同的时间点实现各种语言功能(例如,参见clang C ++ status和gcc c ++ status;同样适用于其他编译器). 在创建C ++库时,通常需要支持最新功能以改 ...

  7. C# 5.0新加特性

    1. 异步编程 在.Net 4.5中,通过async和await两个关键字,引入了一种新的基于任务的异步编程模型(TAP).在这种方式下,可以通过类似同步方式编写异步代码,极大简化了异步编程模型.如下 ...

  8. Android6.0新特性

    1.大量漂亮流畅的动画 安卓6.0系统增加了大量漂亮的过度动画,可以从视觉上减少卡顿感,给用户带来流畅的体验.说到过渡动画,以前可是苹果手机的拿手好戏,现在安卓大有赶超iOS的趋势. 2.相机新增专业 ...

  9. Android 7.0新特性“Nougat”(牛轧糖)。

    1.Unicode 9支持和全新的emoji表情符号 Android Nougat将会支持Unicode 9,并且会新增大约70种emoji表情符号.这些表情符号大多数都是人形的,并且提供不同的肤色, ...

最新文章

  1. Transformer模型深度解读
  2. 警惕开源代码库中的安全隐患
  3. Unity3d之MonoBehaviour的可重写函数整理
  4. Javascript json转对象(互转)
  5. pcn变更流程图_超经典的工程变更流程图
  6. oracle常用数据字典 表,Oracle数据库中常用的数据字典表和视图
  7. 数据分析从零到精通第一课 数据分析技巧和OLAP工具简介
  8. postgresql 转 mysql_PostgreSQL转换为Mysql
  9. “磁碟机”病毒肆虐 数万电脑中招
  10. iOS开发实战细节——通知写法
  11. BIOS设置 翻译中文教程
  12. Mac下Go的安装与配置
  13. 图片按指定比例缩放并压缩至指定大小,解决保存图片文件体积过大bug。
  14. 128Echarts - 关系图(NPM Dependencies)
  15. 编码转换以及乱码恢复
  16. 计算机毕设Python+Vue悠哈出租车管理系统(程序+LW+部署)
  17. 如何去面试软件测试工程师?
  18. 二叉树的递归遍历与非递归遍历
  19. dell台式机进入安全模式_戴尔安全模式按f几_戴尔笔记本如何进入安全模式
  20. 新人大餐:2018最新Office插件开发之ExcelDNA开发XLL插件免费教学视频,五分钟包教包会...

热门文章

  1. Red Hat Enterprice Linux 5测试 Qt 4.7 Qt Creator(二)
  2. 高效分页存储过程代码
  3. 图解 Scala 基本语法 V2018.12.17
  4. CSS3j背景渐变,字体颜色渐变,以及兼容IE写法
  5. j2se--Socket沟通
  6. 用户界面草图设计工具-工具包和资源
  7. maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
  8. 论坛头条内容链接地址有误
  9. angularjs跨页面传参遇到的一些问题
  10. Windows7多合一镜像制作