c#3.0/3.5 中的一些新特性

0 var关键字:隐式类型的局部变量(C# 编程指南)
http://msdn.microsoft.com/zh-cn/library/bb384061.aspx
只可以赋予局部变量推断“类型”var 而不是显式类型。var 关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型、匿名类型、用户定义类型或 .NET Framework 类库中定义的类型。有关如何使用 var 初始化数组的更多信息,请参见隐式类型的数组(C# 编程指南)
 
Code
1 自动实现的属性(C# 编程指南)
http://msdn.microsoft.com/zh-cn/library/bb384054.aspx

当属性访问器中不需要其他逻辑时,自动实现的属性可使属性声明变得更加简洁。当您如下面的示例所示声明属性时,编译器将创建一个私有的匿名后备字段,该字段只能通过属性的 getset 访问器进行访问。

 

Code

 

2 对象和集合初始值设定项(C# 编程指南)

2.1对象初始值设定项
使用对象初始值设定项可以在创建对象时向对象的任何可访问的字段或属性分配值,而无需显式调用构造函数。下面的示例演示如何将对象初始值设定项用于命名类型。请注意,在 Test 类中使用了自动实现的属性。有关更多信息,请参见自动实现的属性(C# 编程指南)

 

Code

2.2集合初始值设定项

使用集合初始值设定项可以在初始化一个实现了 IEnumerable 的集合类时指定一个或多个元素初始值设定项。元素初始值设定项可以是简单的值,也可以是表达式或对象初始值设定项。通过使用集合初始值设定项,您将无需在源代码中指定多个对该类的 Add 方法的调用;编译器会添加这些调用。

下面的示例演示了两个简单的集合初始值设定项:

    List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    List<int> digits2 = new List<int> { 0 + 1, 12 % 3, MakeInt() };
下面的集合初始值设定项使用对象初始值设定项来初始化在前面的一个示例中定义的 Cat 类的对象。

List<Cat> cats = new List<Cat>
{
    
new Cat(){ Name="Sylvester", Age=8 },
    
new Cat(){ Name="Whiskers", Age=2},
    
new Cat() { Name="Sasha", Age=14}
};

 

3匿名类型(C# 编程指南)

匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。类型名由编译器生成,并且不能在源代码级使用。这些属性的类型由编译器推断。匿名类型无法强制转换为除 object 以外的任何类型。 下面的示例演示一个用两个分别名为 Amount 和 Message 的属性初始化的匿名类型。

 

Code
 

当用其他已定义类型对象的一些属性初始化匿名类型时,如果您没有在匿名类型中指定成员名称,编译器会为匿名类型成员指定与用于初始化这些成员的属性相同的名称。必须为使用表达式初始化的属性提供名称。  

 

var productQuery = 
    from prod 
in products
    select 
new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine(
"Color={0}, Price={1}", v.Color, v.Price);
}

 

posted @ 2009-06-01 19:14  rentj  阅读(254)  评论(0编辑  收藏  举报