C# 3.5新特性
隐式类型本地变量
// 隐式类型本地变量,使用var关键字声明,编译器根据类型自动推断识别其变量类型
// 注:var关键字声明的变量,不能与object声明的变量等同。var声明的变量根据类型推断,在编译和运行时的类型均为变量本身真正类型,而用object声明的变量编译时类型为System.Object,并伴随一个隐式类型转换的过程
var a = 1;
var b = "abc";
var c = 3.1415;
对象和集合初始值设定项
//
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public decimal Height { get; set; }
static void Main(string[] args)
{
var p = new Person { Name = "Orochi", Age = 24, Height = 175 };
var persons = new[] {
p,
new Person { Name = "Orochi", Age = 24, Height = 175 },
new Person { Name = "Blinda", Age = 23, Height = 165 },
new Person { Name = "Ninicat", Age = 22, Height = 170 }
};
}
}
匿名类型
匿名类型常常用在查询表达式的结果中,因为这种类型的返回值往往是一个包含一种特定类型的IEnumerable<T>.
拓展方法
// 拓展方法将一个在特定类型上实现的方法引入到该类型上,并可利用该类型直接调用
public static class Extensions
{
public static string AddNewStr(this string str)
{
return str + "test";
}
static void Main(string[] args)
{
string str = "hello";
Console.WriteLine(str.AddNewStr());// hellotest
}
}
Lambda表达式
// Lambda表达式是一种匿名函数结构,它可以方便的实现委托,查询综合和扩展方法的delegate类型参数的初始化定义
delegate void Func(int x);
static void Add(int a) { a++; }
static void Main(string[] args)
{
Func f = new Func(Add);
// 等同于
Func g = (x) => x++;
}
宽松委托
// 宽松委托使得 C# 在判断委托实例化赋值时,对于签名不同的函数可以接受。
// 注:示例未成功
delegate void A (object sender, MouseEventArgs e);
delegate void B (int a, int b);
EventHandler e1, e2;
e1 = new A(...); // OK
e2 = new EventHandler(...); // OK
e1 = e2; // OK
B b = (long a, int b) +> ...{ }; // OK
自动实现属性
// 简化的属性定义方法,不过自动实现属性不能定义只读和只有 get 过程的属性;set 也不能具备访问性描述。
public string Name {get;set;}
分部方法
// 分部方法允许开发人员在多个文件中定义一个类的方法。
// 分部类主要用于隔离来源不同,功能不同或者类型不同的源代码
// 分布方法不能具有访问修饰符或virtual、abstract、override new sealed 或者extern修饰符
// 1、分部方法的类实体必须为 partial。
// 2、分部方法的返回值必须为 void。
// 3、如果没有实现分部方法,但却定义了此方法的声明,在使用这个包含分部方法的类时,编译器自动将没有实现的方法签名移除。
partial class A
{
partial void PrintSum(int x, int y);
public void Add(int x,int y)
{
PrintSum(x,y);
}
}
partial class A
{
partial void PrintSum(int x, int y)
{
Console.WriteLine("Sum is {0}", x + y);
}
}
本文系作者 @jiang 原创发布在 IT梦。未经许可,禁止转载。