/*
*============================主要演示C#3.0的新特性=====================
*一、自動屬性
*二、對像和集合初始化器
*三、擴展方法
*四、Lambda表達式
* 13/6/2010 Berlin
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LinqTest
{
//演示自動屬性
public class Point
{
public int X { get; set; }//自動化屬性
public int Y { get; private set; }//帶修飾符的自動化屬性
public int T { get; set; }
}
//演示對像和集合初始化器;
class Test_45
{
Point p = new Point { X = 23, T =2};//可以通這種方式來實例化一個對像
//初始化一個集合
List<Point> PoList = new List<Point>
{
new Point {X =2,T =3},
new Point {X =4,T=2},
new Point {X=23,T =90}
};
}
//演示擴展方法,所謂擴展方法是指在C#3.0中,對於已經編譯的程序集,在不需要重新編譯源有代碼或不公開源代碼的程序集中添加相關方法
//點評,對於調用 第三方API,在沒有源代碼的情況下想擴展相關功能,就用它啦
//實現:用一個靜態類,靜態方法的第一個參數中傳入要擴展的類名形如:this class object
static class ExtensionsFunction
{
//對Point 擴展了一個方法GetZeroPoint
public static Point GetZeroPoint(this Point p)
{
return new Point { X = 0, T = 0 };
}
//對類Test_45擴展了一個顯示自已類全名的方法
public static void ShowSelfInfo(this Test_45 obj)
{
Console.WriteLine(obj.GetType().Assembly.FullName);
}
}
//使用擴展方法
public class TestExtension
{
public void TestExtenSionFuntion()
{
Point p = new Point { X = 8,T = 9 };
Test_45 t = new Test_45();
p.GetZeroPoint();//調用了Point的一個擴展方法,注意這個方法在類Point中是沒有的
t.ShowSelfInfo();
}
}
//演示Lambda表達式
//Lambda表達式是一種簡化的匿名方法
//有如下幾種表現形式
// (int x)=>{return x+1;}
//(int x)=>x+1;
//x=>x+1;
//(x,y)=>x+y;
public class LambdaTest
{
public void TestLambda()
{
List<Point> pList = new List<Point>
{
new Point {X =2,T =3},
new Point {X =4,T=1}
};
List<Point> ppList = new List<Point>();
ppList = pList.FindAll(p => p.X > 2 && p.T < 3);
}
}
}