您的位置:首页 > 编程语言 > ASP

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:

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;}   //只读,不可写
}


如果属性中有逻辑判断,无法用自动属性来代替。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: