ASP.NET 3.5(C#)系列2-C# 3.0语言新功能介绍
2011-01-27 04:51
465 查看
C#3.0支持了许多新功能,这让一些常用语法在定义的时候更加精简方便,同时有些新功能的推出是为了配合LINQ查询技术。以下是C#3.0的8大新功能,包括:
隐式类型区域变量及数组声明
对象初始化设置
集合初始化设置
匿名类型
Lambda表达式
扩展方法
自动属性实现
部分方法定义
1.隐式类型区域变量及数组声明。
C#3.0推出了一种新的var声明语法,叫做隐式声明,就像传统的Javascript以var声明变量一样。
var age=20 //声明年龄为30,为number数值类型
var name="Mark" //声明名字为Mark,为string字符串类型
var类型的出现,是为了配合在声明LINQ或匿名类型语法时,并无法事先知道类型,或者知道了也没用,var所声明的变量或对象,必须跟随LINQ或匿名类型语法声明而动态变换类型。
1.1隐式声明变量。
例1:
protected void Page_Load(Object sender, EventArgs e)
{
var a = 10;
var b = 5;
var c = a + b;
Response.Write(c);
}
执行的结果是15,说明正确执行。但不可在1.0或者2.0的环境中使用。
1.2隐式声明数组。
//传统声明
int[] arrayInt = new int[5] { 100, 200, 300, 400, 500 };
string[] arrayStr = new string[4] { "May", "Bob", "John", "Mark" };
//隐式声明
var ImplicitlyArrayInt = new[] { 100, 200, 300, 400, 500 };
var ImplicitlyArrayStr = new[] { "May", "Bob", "John", "Mark" };
例2:
2.对象初始化设置。
2.1 类对象初始化
在对象初始化中,需要定义构造函数才可以进行带参数的初始化。而如果遇到多个属性,就要建立多个初始化函数(重载)。可是这样一来,反倒成了累赘。于是C#3.0就有了新的初始化机制。
比如现在定义了一个person类。
那么我在初始化的时候,并不用特意创建构造函数。
从而省去了繁琐的创建构造函数机制,可使对象在初始化时直接定义属性。
2.2 List集合
3.自动属性的实现
倘若在属性中没有逻辑判断,那么可以用自动属性的实现来代替传统C#2.0的声明。
如果属性中有逻辑判断,无法用自动属性来代替。
隐式类型区域变量及数组声明
对象初始化设置
集合初始化设置
匿名类型
Lambda表达式
扩展方法
自动属性实现
部分方法定义
1.隐式类型区域变量及数组声明。
C#3.0推出了一种新的var声明语法,叫做隐式声明,就像传统的Javascript以var声明变量一样。
var age=20 //声明年龄为30,为number数值类型
var name="Mark" //声明名字为Mark,为string字符串类型
var类型的出现,是为了配合在声明LINQ或匿名类型语法时,并无法事先知道类型,或者知道了也没用,var所声明的变量或对象,必须跟随LINQ或匿名类型语法声明而动态变换类型。
1.1隐式声明变量。
例1:
protected void Page_Load(Object sender, EventArgs e)
{
var a = 10;
var b = 5;
var c = a + b;
Response.Write(c);
}
执行的结果是15,说明正确执行。但不可在1.0或者2.0的环境中使用。
1.2隐式声明数组。
//传统声明
int[] arrayInt = new int[5] { 100, 200, 300, 400, 500 };
string[] arrayStr = new string[4] { "May", "Bob", "John", "Mark" };
//隐式声明
var ImplicitlyArrayInt = new[] { 100, 200, 300, 400, 500 };
var ImplicitlyArrayStr = new[] { "May", "Bob", "John", "Mark" };
例2:
using System; using System.Linq; public partial class ImpilicityArray : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int[] cars = new int[] { 100, 200, 300, 400, 500 }; //传统方法 var BMW = new[] { 100, 200, 300, 400, 500 }; //隐式声明方法 //读取数组方法一 for (int i = 0; i < BMW.Length; i++) { Response.Write(BMW.ElementAt(i)); } //读取方法数组二 foreach (int p in BMW) { Response.Write(p); } Response.Write("<hr />"); //1.查询所有价格的车种,LINQ var prices = from p in BMW select p; //p为该LINQ语句中的范围变量,返回结果prices为一维数组,不可以用int来定义。 Response.Write("目前销售的BMW车价为:"); foreach (var p in prices) { Response.Write(p + "万元<br />"); } //2.查询高价位车 int highPrice = 400; //定义高价位价格 var highLevel = from p in prices where p >= highPrice select p; //因为LINQ的结果是一个数组,但又不可以定义int[] highLevel,所以这里用var来定义。 foreach (int p in highLevel) //此时定义p为int型或var型都正确。 { Response.Write("高价车有" + p + "万元<br />"); } } }
2.对象初始化设置。
2.1 类对象初始化
在对象初始化中,需要定义构造函数才可以进行带参数的初始化。而如果遇到多个属性,就要建立多个初始化函数(重载)。可是这样一来,反倒成了累赘。于是C#3.0就有了新的初始化机制。
比如现在定义了一个person类。
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> ///Person 的摘要说明 /// </summary> public class Person { public Person() { // //TODO: 在此处添加构造函数逻辑 // } public string Name ; public string Sex ; }
那么我在初始化的时候,并不用特意创建构造函数。
Person A = new Person { Name = "Mark" Sex = "男" } //这里不是(),而是中括号{};
从而省去了繁琐的创建构造函数机制,可使对象在初始化时直接定义属性。
2.2 List集合
protected void Page_Load(object sender, EventArgs e) { List<string> people = new List<string>(); //旧的的LIST初始化 people.Add("mark"); people.Add("bob"); people.Add("tank"); List<string> people2 = new List<string> { "mark", "bob", "tank" }; //C# 3.0新方法 }
3.自动属性的实现
倘若在属性中没有逻辑判断,那么可以用自动属性的实现来代替传统C#2.0的声明。
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> ///Person 的摘要说明 /// </summary> public class Person { public string Name { get; set; } //自动属性 public string Sex { get; set; } public string Age { get; private set;} //只读,不可写 }
如果属性中有逻辑判断,无法用自动属性来代替。
相关文章推荐
- ASP.NET 3.5(C#)系列3-新一代事务机制
- ASP.NET 3.5(C#)系列3-新一代事务机制II-并发事务级别
- ASP.NET 3.5(C#)系列1-初探ASP.NET 3.5
- ASP.NET 5系列教程 (三):view components介绍
- ASP.NET MVC 3.0学习系列文章--Razor and ASP.NET MVC 3.0
- ASP.NET 3.5(c#)区域化设置(LCID)
- ASP.NET MVC 3.0学习系列(19)-开源控件实现表格排序和分页
- ASP.NET MVC 3.0学习系列文章--Dependency Resolution in ASP.NET MVC 3.0
- 庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—教程
- 温故知新ASP.NET 2.0(C#)系列
- 晚上无聊象征性收取了网友100元辛苦费,实现支持多语言功能的XML语言包版的C#的ASP.NET多语言支持例子程序
- C#语言的简单介绍和.NET Framework
- 温故知新ASP.NET 2.0(C#)系列文章索引
- Beginning ASP.NET 3.5 in C# 2008 From Novice to Professional Second Edition(ASP.NET 3.5(C#2008)入门 )翻译-第十章(2)
- ASP.NET MVC 3.0(十六): MVC 3.0 实例系列之表格数据的分页
- ASP.NET中DropDownList控件的数据绑定的C#语言描述
- 温故知新ASP.NET 2.0(C#)(5) - Localization(本地化,多语言)
- 基于ASP.net C#技术来实现,介绍如何处理Session对象变量失效的问题
- ASP.NET介绍及C#基本语法--案例实战