|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
可怜的程序员,还是逃不出移植的命运!在C#2.0中,微软给我们带来了一些新的特征,比方泛型,匿名托付等。但是,这些新的特征多几少会给人一种从其余言语中“抄”来的感到(比方泛型相似C++的模板,一些特征相似Java中的一些工具)。可是在C#3.0中,微软给我带来的一些新特征多是之前一切开辟言语都没有的特征。这无疑年夜年夜的表现了C#3.0在开辟言语中壮大的上风。
Lambda表达式
Lambda表达式是一个匿名函数,它能够包括表达式和语句,而且可用于创立托付或表达式目次树范例。一切Lambda表达式都利用Lambda运算符=>。关于Lambda更具体的解说人人能够参看MSDN。内里说的很分明。
这里复杂举个例子来讲明Lambda的优点。Lambda在对匿名托付的处置上供应了更分明的实行体例。比方在2.0中。我们能够写如许的代码:- CodepublicclassExample{publicstaticvoidDemo(System.Windows.Controls.TextBlockoutputBlock){Funcconvert=delegate(strings){returns.ToUpper();};stringname="Dakota";outputBlock.Text+=convert(name)+"n";}}
复制代码 在C#中将Func<(Of<(T,TResult>)>)托付与匿名办法一同利用。
在3.0中,我们可使用Lambda来更分明的举行参数的传送:- CodepublicclassExample{publicstaticvoidDemo(System.Windows.Controls.TextBlockoutputBlock){Funcconvert=s=>s.ToUpper();stringname="Dakota";outputBlock.Text+=convert(name)+"n";}}
复制代码 Lambda表达式的基本范例是泛型Func托付之一。如许能以参数情势传送lambda表达式,而不必显式将其分派给托付。特别是,由于System.Linq定名空间中很多范例办法具有Func<(Of<(T,TResult>)>)参数,因而能够给这些办法传送lambda表达式,而不必显式实例化Func<(Of<(T,TResult>)>)托付。如许可使我们的代码加倍简便,逻辑上更容易于了解。
对象的初始化
在C#中,对象的初始化也做了一些改善。一个新的功效就是供应了更便利的语律例则来声明变量的值。
假设我们声明一个Student对象:- CodepublicclassStudent{privatestring_stuName;privatestring_stuAge;privateint_stuClass;publicStudent(){}publicstringStuName{get{return_stuName;}set{_stuName=value;}}publicstringStuAge{get{return_stuAge;}set{_stuAge=value;}}publicintStuClass{get{return_stuClass;}set{_stuClass=value;}}}
复制代码 在C#2.0中,我们是如许声明变量并赋值的:- Studentstu=newStudent();stu.StuName="Brian";stu.StuAge="21";stu.StuClass="1班";
复制代码 而在C#3.0中,我们能够如许初始化对象:- Studentstu2=newStudent{StuName="Brian",StuAge="21",StuClass="1班"};
复制代码 从代码中不丢脸出,C#3.0给我们供应了很便利得体例来举行对象的初始化事情。
查询
这个想必人人都应当有所耳闻,那就是鼎鼎台甫的Linq。这是C#3.0中最共同好用的新特征之一。Linq改动了我们写数据使用程序的体例,先前,开辟职员必要思索并编写不必的代码来处置分歧数据源中的数据(SQLServer,XML,Memory....)。LINQ很好的帮我们办理了这个烦人的成绩。同时借助Lambda,我们能够更便利正确的查询我们想要的数据。
利用Linq复杂的数据查询例子:- CodeprivatevoidBindGridView(stringcriteria){stringstrConn=ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;NorthwindDbdb=newNorthwindDb(strConn);IEnumerableresults;if(criteria==string.Empty){results=db.Employee.ToArray();}else{results=(fromcindb.Employeewherec.FirstName.Contains(criteria)selectc).ToArray();}GridView1.DataSource=results;GridView1.DataBind();}
复制代码 变量声明
这里要说的是var。var是C#3.0中供应的用于声明变量的关头字,开辟职员能够不思索变量的范例就能够对变量举行声明(这一点用法十分相似Javascript)。可是二者仍是有些差别。
不异点:用var来声明任何范例的部分变量。
分歧点:它仅仅卖力告知编译器,该变量必要依据初始化表达式来揣度变量的范例,并且只能是部分变量。
我们能够如许声明变量:- vari=10;varname="edisundong";varnumbers=newint[]{1,2,3};
复制代码 var仅仅是个关头字,它并非C#3.0中的一种新的范例,而是卖力告知编译器,该变量必要依据初始化表达式来揣度变量的范例,下面的语句相称于- inti=10;stringname="edisundong";int[]numbers=newint[]{1,2,3};
复制代码 这里还必要注重几点:
1.在声明时必需同时赋值。
2.在利用var声明一个部分变量后,他仍旧具有强范例。- varinteger=10;integer="edisundong";
复制代码 编译时会报Cannotimplicitlyconverttypestringtoint毛病。
3.初始化器表达式的编译期范例不克不及够是空(null)范例。
4.var的声明仅限于部分变量
扩大办法
另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。 |
|