C# 3.0相比C# 2.0增加的功能

Posted 我不坚强,谁替我坚强

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 3.0相比C# 2.0增加的功能相关的知识,希望对你有一定的参考价值。

1.自动属性

 (1)自动属性(Auto-Implemented Properties),C#自动属性可以避免原来我们手工的来声明一个私有成员变量以及和属性get,set的书写。

       public class Kencery  //声明一个Kencery的类

       {

              public int ID{get;set;}  //主键ID

              public string Name{get;private set;}  //只读属性名字

              public int Age{get;set;}   //年龄

       }

2.隐式类型var

 (1)现在越来越多的项目中你可以看到var,这是什么意思呢?其实这就是C#3.0新特性提供的隐士类型var,var关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。

       var Kencery=”大家晚上好”;   //定义变量

       var list=new List<int>();    //定义一个List集合

       var Kencery=new{ID=1,Name=”HYL”,age=24}  //对象初始化起定义的类型

       var geners = from n in StoreContract.ProductCatalogs

                         where n.IsSystem == false

                         select n;

            return View(geners);

    //Linq的使用,这个在后面我们会大量的使用,大家没学过的可以自学。

 (2) var有这么大的功能,那么他有什么缺点呢,我们这里列举大致一下

       1)只有在同一个语句中声明和初始化局部变量时,才能使用var,不能将该变量初始化为null,方法组或者匿名方法。

       2)不能将var用于类范围的域。

       3)由var声明的变量不能用在初始化表达式中,换句话说,此表达式是合法的:int i=(i=20);,但是后面的这个表达式会产生编译错误:var i=(i=20)。

       4)不能在同一个语句中初始化多个隐式类型的变量。

       5)如果范围中有一个名为var的类型,则var关键字将解析为该类型名称,而不做为隐式类型局部变量声明的一部分去处理。

3.匿名类

 (1)将一组只读属性封装到单个对象中,而无需首先显示定义一个类型,类型名由编译器生成,并且不能在源代码级使用,每个属性的类型由编译器推断。[var]

 (2)用来初始化属性的表达式不能是null,匿名函数和指针类型。

       var Kencery=new{ID=1,Name=”HYL”,Age=24}

4.对象初始化器和集合初始化器

 (1)对象初始化器是利用了编译器对对象中对外可见的字段或者属性进行按序赋值,在编译还是隐式调用了构造函数,对字段或属性的赋值可以是一个或者多个。

       List<Kencery> kencery=new List<Kencery>{  //Kencery类
              new Kencery{ID=1,Name=”Hanyinglong”,Age=19},

       New Kencery{ID=2,Name=”HYL”},

       null

};

Person p=new Person{ ID=1,Name=”HYL”,Age=19 };

5.扩展方法

 (1)扩展方法是一种特殊的静态方法,它定义在一个静态类中,但可以在其他类的对象上向调用实例方法那样进行调用。因此,通过扩展方法,我们就可以在不修改一个类型的前提下对一个类型进行功能上的扩充,这种方法并不会产生新的类型,而是采用向已有类中加入新方法的方式来完成功能的扩展。

 (2)在对已有类进行扩展时,我们需要将所有的扩展方法都写在一个静态类中,这个静态类就相当于存放扩展方法的容器,所有的扩展方法都可以写在这里面。扩展方法与普通方法的声明方式不同,扩展方法的第一个参数以this关键字开始,后面跟被扩展的类型,然后才是真正的参数列表。

       public static 返回类型 扩展方法名(this 要扩展的类型 参数名称[,扩展方法参数列表])

       {

             

       }

       public static int ToInt32(this string s) //扩展方法将字符串转换为整形

       {

              return Int32.Parse(s);

       }

6.Lambda表达式

 (1) ”Lambda表达式”是一个匿名函数,他可以包含表达式和语句,可用于创建委托。

 (2) 运算符 =>,该运算符读作:”goes to”。

 (3) 格式:(input parameters)=>expression

       delegate bool DelDemo(int a,int b);  //定义委托

       DelDemo Lambda=(int a,int b)=>a>b  //使用Lambda表达式表示a是否大于b

       Console.WriteLine(Lambda(1,4));

以上是关于C# 3.0相比C# 2.0增加的功能的主要内容,如果未能解决你的问题,请参考以下文章

C# 2.0 中的新增功能03 匿名方法

使用 C# 3.0 编译的 C# 2.0 代码使用程序集

如何在 c# 2.0/3.0 上选择指定值的 xmlelements xmlnodes xmlattributes

C# 本地函数-

C# 3.0中的新增功能10 表达式树 02 说明

自动扩展 C# 3 语法糖