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);
      }
  }

本文系作者 @ 原创发布在 IT梦。未经许可,禁止转载。

喜欢()
0 0 投票数
Article Rating
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
24 文章
10 评论
64 喜欢
Top
0
希望看到您的想法,请发表评论。x
()
x