在新版.net3.5中的c#语言包含了下列新的变化:
1) 隐含类型局部变量
2) 扩展方法
3) 对象与集合初始化器
4) 匿名方法
5) Lambda表达式
6) 查询表达式(LINQ)
7) 表达式树
1 隐含类型局部变量
例子:
var n = 5;
var s = "Hello";
var d = 1.0;
var aNumbers = new int[] { 1, 2, 3 };
var orders = new Dictionary<int, string>();
orders.Add(1, "p1");
orders.Add(2, "p2");
System.Console.WriteLine("The first variables is {0}", n);
System.Console.WriteLine("The second variables is {0}", s);
System.Console.WriteLine("The thrid variables is {0}", d);
int i;
for (i = 0; i < 3; i++)
{
System.Console.WriteLine("The" + i + " variables is {0}", aNumbers[i]);
}
for (i = 0; i < 2; i++)
{
System.Console.WriteLine("The" + i + " variables is {0}", orders[i + 1]);
}
var为关键字,编译器可以根据后面的初始化语句自动推断类型
初始化语句必须为表达式
仅限于局部变量,也可以用于foreach,using等语句中。
数组也可以作为隐含类型。
没有初始化的使用将抱错。
2 扩展方法
例子:
#region Extension method starts
public static class Extensition
{
public static string F(this string s)
{
return "Welcome to " + s;
}
}
#endregion Extension method ends
string s = "you";
s = s.F();
Console.WriteLine(s);
扩展方法允许我们在不改变源代码的情况下扩展现有类型中的实例方法。
编译器在编译上面语句时,将s.F()方法调用代替为
Extensition.F(s);
扩展方法的本质为将实例方法在编译期间改变为静态类中的静态方法调用。
优先级:现有实例方法优先级最高,其次为最近namespace下的静态类的静态方法,最后为较远的namespace下的静态类的静态方法。
该方法为编译时技术。