深入理解C# 3.0的五项主要改进
2007-11-01 17:57
316 查看
深入理解C# 3.0的五项主要改进
1.隐型局部变量C# 3.0引入了一个叫做“var”的新关键字。这个关键字允许开发者建立一个变量,但不必明确它的类型。例如,用var说明一个字符串,就像这样:
varmyData = "This is my data"; |
虽然var允许您建立隐含的类型,它并没有降低C#浓厚的类型特征。var关键字只有在建立变量时有用,一旦您建立变量并且确定它的类型以后,就不能再用var来改变一个变量的类型。
例如,这段代码没有作用:
varmyDate = DateTime.Now; myDate = "Hello."; |
Customer myCustomer = new Customer(); |
varmyCustomer = new Customer();
var关键字的另一个特点在于,使用它可以避免改变一个返回某个类型对象的方法调用。例如,在C# 2.0中,如果您需要调用一个返回Customer对象的方法,您应该编写以下代码:
Customer myCustomer = GetByName("Zach"); |
varmyData = GetByName("Zach"); |
2.extension方法
在C#中,您不能继承和扩充用访问标识符标记为“封装”的类型。但在C# 3.0中,extension方法允许您扩充任何类,甚至是标记为封装的类。例如,如果希望添加一个NoSpaces()方法到字符串类中,我们要定义一个类似列表A中的extension方法。
列表A
namespaceMyExtensionMethods { public static class Extension { public static void NoSpaces(this string data) { return data.Replace(" ", ""); } } } |
extension方法的第一个参数决定extension方法的有效类型。在这种情况下,“这个字符串数据”(this string data)表明extension方法适用于字符串类;如果extension方法以“这个对象数据”(this object data)为第一个参数,则说明这个方法对每个对象有效。
要表明您希望导入extension方法,只需在它们的命名空间中包括一个using指令。例如,要应用上面说明的方法,需要在类文件中包括一个using MyExtensionMethods指令:(列表B)
列表B
usingMyExtensionMethods; namespace MyNamespace { public class MyClass { public MyClass() { string data = "this is my data"; //nospaces will contain "thisismydata". string nospaces = data.NoSpaces(); } } } |
3.对象初始化器
在C# 2.0中,开发者认为建立许多构造器来设定某个属性值为对象初始化过程。下面是一个例子: 类访问Customer方法:
Customer myCustomer = new Customer("Zach", "Smith"); |
public Customer(string firstName, string lastName) : this() { this.FirstName = firstName; this.LastName = lastName; } public Customer() {} |
类访问Customer方法:
Customer myCustomer = new Customer{FirstName = "Zach", LastName = "Smith" }; |
public Customer() {} |
这样产生的另外一个效果是:代码变得更容易阅读了。例如,虽然我们清楚知道下面的代码对一个Car对象进行了初始化,但我们并不清楚其中变量的作用:
Car car = new Car(18, 10, 550); |
Car car = new Car { WheelDiameter = 18, WheelWidth = 10, Horsepower = 550 }; |
C# 2.0引入了匿名方法,C# 3.0推出匿名类型。匿名类型与匿名方法类似,它们都是以嵌入方式建立,并没有正式的名称。在建立一个匿名类型,您必须组合上述对象初始化器和隐型局部变量两个概念。下面是一个匿名类型的例子:
varmyType = new { Length = 79, Width = 30 }; |
private void Speed() { var cobra = new { Horsepower = 550, Torque = 570 }; } |
private void Speed() { var cobra = new { Horsepower = 550, Torque = 570 }; var mustang = new { Horsepower = 300, Torque = 300 }; mustang = cobra; //or you could say cobra = mustang } |
在之前的C#版中,开发者应用许多不同的查询语言来访问不同的数据源。例如,要查询一个XML文件,开发者会使用XPath,要查询一个SQL数据库,开发者将使用SQL。在过去这种方法十分有效,并且现在仍然是访问各种数据的主要方法。但是,这种方法具有一些缺点。 一个显著的缺点在于:开发者必须以一种不同的语言,而非他们当前使用的语言(如SQL或XPath)来编写查询代码。另一个缺点是,在执行某些查询语言,如SQL时,开发者必须编写映射代码将查询结果转化为可用的C#业务对象。
C#3.0推出一种称之为语言集成查询(LINQ)的新方法。应用LINQ,开发者可以编写出能够搜索任何IEnumerable<T>数据源的代码。所以除了应用TSQL访问MS SQL数据库,应用XPath访问XML文件外,他们还可以应用LINQ。
下面的代码(列表C)是一个LINQ查询的例子,它返回所有OrderCount大于10的顾客:
列表C
using System; using System.Query; using System.Collections.Generic; public class SampleClass { static void Main() { List<Customer> customers = GetCustomers(); //Write our query to retrieve customers who have more than // 10 orders. IEnumerable<Customer> queryResult = from customer in customers where customer.OrderCount > 10 orderbycustomer.ID select customer; } } |
基本上,在ORM解决方案中,LINQ对象用途很大。同样,它的范围也非常广泛,有大量MSDM信息描述了它的功能。欲了解更多信息,请访问LINQ主页
相关文章推荐
- 深入理解C# 3.0的五项主要改进
- 深入理解C# 3.0的五项主要改进
- 深入理解C# 3.0的五项主要改进_C#教程
- 深入理解C# 3.0的五项主要改进
- 深入理解C# 3.0的五项主要改进(隐型局部变量)
- 深入理解C# 3.0的五项主要改进 (extension方法)
- 深入理解C# 3.0的五项主要改进
- 深入理解C# 3.0的五项主要改进 (对象初始化器)
- 深入理解C# 3.0的五项主要改进_C#教程
- 深入理解C# 3.0的五项主要改进 (LINQ)
- 深入理解C# 3.0的五项主要改进
- 【转载】深入理解C# 3.0的五项主要改进
- 理解C# 3.0的五项主要改进
- 理解C# 3.0的五项主要改进
- 理解C# 3.0的五项主要改进
- 理解C# 3.0的五项主要改进
- 理解C# 3.0的五项主要改进
- 深入理解 c# 第二章 C#2在委托实例化上的改进
- C#值类型和引用类型的深入理解
- C#中修饰符static的深入理解