3.x特性主要是编程语言层面的,只是编译器在编译的时候给我们添加了许多的代码,其编译后的IL和2.0的没有什么不一样。
3.x的特性有:匿名类型,扩展方法,匿名方法(2.0)Lambda表达式,自动实现字段,对象初始化和集合初始化.
3.0的所有新特性,仅仅是在其编译器上增加了功能,使我们的代码更加的简洁,特性下写的代码编译成中间语言和2.0没有什么差异,其CLR仍然是2.0的。
也就是说:C#3.x仅仅是基于.NET Programming Language,而不是基于.NET Framework的
1. Anonymous Type匿名类型:不需要既定类型的情况下使用其对象实例。个人认识像是使用数据结构。
var v = new { ID = Guid.NewGuid(), Name = "tye" }; // 匿名方法的使用
.net 3.0的新特性---匿名方法,允许内联申明方法而无需使用代理函数,而Lambda表达式能使用更简洁的代码完成相同的功能。
2. Anonymous Method匿名方法:匿名方法允许我们以一种“内联”的方式来编写方法代码,
将代码直接与委托实例相关联,从而使得委托实例化的工作更加直观和方便。
addbutton.click += delegate
{
listbox.items.add(textbox.text);
}
addbutton.click += delegate(object sender,eventargs e)
{
messagebox.show((button)sender).text);
}
delegate void mydelegate();
mydelegate d = delegate
{
...
return;
}
delegate int mydelegate();
mydelegate d = delegate
{
...
return 100;
}
3.Lambda表达式
class Program
{
static void Main()
{
Function<int, bool> function3 = x => x > 0;
function3(20);
}
}
delegate TResult Function<TArgs, TResult>(TArgs args);
3.x特性例子,除了扩展方法外
class AnonymousTest
{
public void Anonymous()
{
var v = new { ID = Guid.NewGuid(), Name = "tye" }; // 匿名类型
MyDelegate myDelegate = new MyDelegate(Method); // 命名委托
myDelegate(3, "hello");
MyDelegate myDelegate2 = delegate(int x, string y) //匿名方法的使用
{
Console.WriteLine(x + "," + y);
};
myDelegate2(5, "crj");
MyDelegate myDelegate3 = (x, y) => { Console.WriteLine(x + y); }; //Lambda表达式
}
public void Method(int x, string y)
{
Console.WriteLine(x + "," + y);
var names = list.Where(name => name.EndsWith("t")); //LINQ
}
public double X { get; set; } //自动实现属性
public double Y { get; set; }
AnonymousTest at = new AnonymousTest { X = 1, Y = 3 }; // 对象初始化
List<string> list = new List<string> { "tye", "crj", "hkb" }; //集合初始化