C# 3.0新语言特性和改进(一)
引言
关于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 = ;
var j = "Hello World";
var k = 50.36;
var x; //错误
var y = null; //错误
var z = { , , }; //错误
去掉错误代码,我们调试状态下,查看数据类型
隐含类型局部变量要点:
- 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 = },
new { Name = "LiSi", Age = }
};
匿名类型要点:
- 可以使用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> { ,,,,};
C# 3.0新语言特性和改进(一)的更多相关文章
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
整体来说.Visual Studio 2008和.NET 3.5是建立在.NET2.0核心的基础之上,.NET2.0核心本身将不再变化(假设不了解.NET2.0的朋友,请參看MSDN或者一些经典的书籍 ...
- Java8新语言特性
Java8简明指南 欢迎来到Java8简明指南.本教程将一步一步指导你通过所有新语言特性.由短而简单的代码示例,带你了解如何使用默认接口方法,lambda表达式,方法引用和可重复注解.本文的最后你会熟 ...
- Netty 4.0 新的特性及需要注意的地方
Netty 4.0 新的特性及需要注意的地方 这篇文章和你一起过下Netty的主发行版本的一些显著的改变和新特性,让你在把你的应用程序转换到新版本的时候有个概念. 项目结构改变 Netty的包名从or ...
- C# 7.0新加特性
以下将是 C# 7.0 中所有计划的语言特性的描述.随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的大部分将活跃起来.现在是时候来展示这些特性,你也告诉借此告诉 ...
- C# 5.0新加特性
1. 异步编程 在.Net 4.5中,通过async和await两个关键字,引入了一种新的基于任务的异步编程模型(TAP).在这种方式下,可以通过类似同步方式编写异步代码,极大简化了异步编程模型.如下 ...
- C# 2.0新加特性
泛型(Generics) 泛型是CLR 2.0中引入的最重要的新特性,使得可以在类.方法中对使用的类型进行参数化. 例如,这里定义了一个泛型类: class MyCollection<T> ...
- C# 6.0新加特性
1.自动属性的增强 1.1.自动属性初始化 (Initializers for auto-properties) C#4.0下的果断实现不了的. C#6.0中自动属性的初始化方式 只要接触过C#的肯定 ...
- C# 4.0新加特性
协变和逆变 这个在C#2.0中就已经支持委托的协变和逆变了,C#4.0开始支持针对泛型接口的协变和逆变: IList<string> strings = new List<strin ...
- dbt 0.13.0 新添加特性sources 试用
dbt 0.13 添加了一个新的功能sources 我呢可以用来做以下事情 从基础模型的源表中进行数据选择 测试对于源数据的假设 计算源数据的freshness source 操作 定义source ...
随机推荐
- mybatis plugins实现项目【全局】读写分离
在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...
- 前端制作动画的几种方式(css3,js)
制作动态的网页是是前端工程师必备的技能,很好的实现动画能够极大的提高用户体验,增强交互效果,那么动画有多少实现方式,一直对此有选择恐惧症的我就总结一下,以便在开发的时候选择最好的实现方式. 1.css ...
- HTML+CSS 项目总结
在过去的大概一个月的学习,基本掌握了HTML+CSS的用法和特性. 这个星期老师给我们布置了一个PC端的实战项目,并且要求在3-4天内完成,我不惜废寝忘食,在紧迫的时间内大致地完成了,但是有些效果不能 ...
- php 基础代码大全(不断完善中)
下面是基础的PHP的代码,不断完善中~ //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线 ...
- Three.JS 从世界坐标系转换到屏幕坐标系
var projector = new THREE.Projector(); var world_vector = new THREE.Vector3(0,0,1); var vector = pro ...
- Maven安装
开发分布式的商场系统,用到了一些新的技术,做一个记录和分享 这里讲一下maven安装 首先什么是Maven Maven作为一个构建工具,不仅帮我们自动化构建,还能抽象构建过程,提供构建任务实现.他跨平 ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- 周末聊聊IT人员的人脉观:关于帮妹子找兼职有感
背景: 前几天,有个认识了好几年的网友,现在是大学生,在厦门读大一,说和她同学要一起到广州找兼职,看我有没有介绍. 像我这么积极热心善良的人,就说帮她找找看,结果问了几次,没消息,只好诚实的回复人家, ...
- Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST API,就能够很容易地构建一个增删查改应用.这个应用始终遗留了一个问题,Web App在访问REST AP ...
- Windows Server 2012 磁盘管理之 简单卷、跨区卷、带区卷、镜像卷和RAID-5卷
今天给客户配置故障转移群集,在Windows Server 2012 R2的系统上,通过iSCSI连接上DELL的SAN存储后,在磁盘管理里面发现可以新建 简单卷.跨区卷.带区卷.镜像卷.RAID-5 ...