C# 3.0新语言特性和改进(上篇)_1800
2010-07-01 13:12
120 查看
作者:李永京 起源:专客园 时光:2008-09-23 浏览:4157 次 本白链交 [珍藏]
摘要:总体来道,Visual Studio 2008和.NET 3.5是树立正在.NET2.0中心的根基之上,C# 3.0新言语特性在.NET2.0基本长进止了改良,那些改入的功效能够大大简化人们编写程序。
[1] C# 3.0新言语特性1
[2] C# 3.0新言语特性2
总体来道,Visual Studio 2008和.NET 3.5是树立在.NET2.0核口的根基之上,.NET2.0中心自身将不再变化(假如没有了解.NET2.0的冤家,请参望MSDN或许一些经典的书籍),C# 3.0新语行特性在.NET2.0根底长进行了改进,这些改良的功效可以大大简化我们编写程序。闭于C# 3.0新语行特性在专客园里的良多友朋皆引见了,我在这里简略先容一下,记载本人所教的西西,也为前面的LINQ挨下基本。
C# 3.0新语行特性和改良包含:
主动属性(Auto-Implemented Properties)隐露类型部分变质(Local Variable Type Inference)匿名类型(Anonymous Types)对于象取聚集始初化器(Object and Collection Initializers)扩大方式(Extension Methods)Lambda表达式和Lambda表达式树 (Lambda Expression and Lambda Expression Trees)自动属性(Auto-Implemented Properties)主动属性可以防止本来这样人们手农声亮一个公有成员变质以及编写get/set逻辑,正在VS2008中能够像下里那样编写一个类,编译器会自动天天生公有变量和默许的get/set 操做。您也可以分离订义get和set的“protected”等拜访级别。
在.Net2.0框架下,我们可以这样写一个User类:
public class User{ private int _id; private string _name; private int _age; public int Id { get { return _id; } set { _id = value; } } public string Name { get { return _name; } set { _name = value; } } public int Age { get { return _age; } set { _age = value; } }}
如今,可以这样简化:
public class User{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }}
像上里这样的空的get/set属性的话,它会自动为您在类中生成一个公有成员变量,对这个变量完成一个公然的getter 和setter。我们可以使用.NET启收环境所降求的ildasm.exe(IL代码反汇编器)农具来剖析程序集或许模块的内容。我便不揭图了。
隐含类型局部变量(Local Variable Type Inference)C#3.0引入了var这个新要害字,在声亮部分变量时可用于替换本先的类型名,便该一个变量声明本识为var类型并且当范畴域中出有var称号类型具有,那么这个声明便称为隐含类型局部变量。如下(同等于//前面的显式声明):
var i = 5;//intvar j = 23.56;//doublevar k = "C Sharp";//stringvar x;//搭档var y = null;//过错var z = { 1, 2, 3 };//差错
在调试状况下,编译器说明如下
隐露类型部分变质要面
var p1 = new { Id = 1, Name = "YJingLee", Age = 22 };//属性也没有须要声名var p2 = new { Id = 2, Name = "XieQing", Age = 25 };p1 = p2;//p1,p2构造雷同,可以相互赋值
正在那里编译器会以为p1,p2相称于:
public class SomeType{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }}
那么数组怎样定义呢?使用"new[]"症结字来声明数组,加上数组的初始值列表。像这样:
var intArray = new[] { 2, 3, 5, 6 };var strArray = new[] { "Hello", "World" };var anonymousTypeArray = new[] { new { Name = "YJingLee", Age = 22 }, new { Name = "XieQing", Age = 25 } };var a = intArray[0];var b = strArray[0];var c = anonymousTypeArray[1].Name;
匿名类型要面
摘要:总体来道,Visual Studio 2008和.NET 3.5是树立正在.NET2.0中心的根基之上,C# 3.0新言语特性在.NET2.0基本长进止了改良,那些改入的功效能够大大简化人们编写程序。
[1] C# 3.0新言语特性1
[2] C# 3.0新言语特性2
总体来道,Visual Studio 2008和.NET 3.5是树立在.NET2.0核口的根基之上,.NET2.0中心自身将不再变化(假如没有了解.NET2.0的冤家,请参望MSDN或许一些经典的书籍),C# 3.0新语行特性在.NET2.0根底长进行了改进,这些改良的功效可以大大简化我们编写程序。闭于C# 3.0新语行特性在专客园里的良多友朋皆引见了,我在这里简略先容一下,记载本人所教的西西,也为前面的LINQ挨下基本。
C# 3.0新语行特性和改良包含:
主动属性(Auto-Implemented Properties)隐露类型部分变质(Local Variable Type Inference)匿名类型(Anonymous Types)对于象取聚集始初化器(Object and Collection Initializers)扩大方式(Extension Methods)Lambda表达式和Lambda表达式树 (Lambda Expression and Lambda Expression Trees)自动属性(Auto-Implemented Properties)主动属性可以防止本来这样人们手农声亮一个公有成员变质以及编写get/set逻辑,正在VS2008中能够像下里那样编写一个类,编译器会自动天天生公有变量和默许的get/set 操做。您也可以分离订义get和set的“protected”等拜访级别。
在.Net2.0框架下,我们可以这样写一个User类:
public class User{ private int _id; private string _name; private int _age; public int Id { get { return _id; } set { _id = value; } } public string Name { get { return _name; } set { _name = value; } } public int Age { get { return _age; } set { _age = value; } }}
如今,可以这样简化:
public class User{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }}
像上里这样的空的get/set属性的话,它会自动为您在类中生成一个公有成员变量,对这个变量完成一个公然的getter 和setter。我们可以使用.NET启收环境所降求的ildasm.exe(IL代码反汇编器)农具来剖析程序集或许模块的内容。我便不揭图了。
隐含类型局部变量(Local Variable Type Inference)C#3.0引入了var这个新要害字,在声亮部分变量时可用于替换本先的类型名,便该一个变量声明本识为var类型并且当范畴域中出有var称号类型具有,那么这个声明便称为隐含类型局部变量。如下(同等于//前面的显式声明):
var i = 5;//intvar j = 23.56;//doublevar k = "C Sharp";//stringvar x;//搭档var y = null;//过错var z = { 1, 2, 3 };//差错
在调试状况下,编译器说明如下
隐露类型部分变质要面
- var为要害字,可以依据前面的初始化语句自动推续类型,这个类型为强类型。
- 初始化语句必需为表达式,不可认为空。且编译时可以推续类型。一夕初始化之后,只可以存储这品种型。
- var声明的仅限于局部变量,没有可用于字段。亦可以用于for,foreach,using 等语句中。
- 数组也可以做为隐露类型。
- 初始化语句不能是一个本身的对象或许集合初始化器,但是他可以是包括一个对象或者者初始化器的一个new表达式。
- 假如局部变量声明包括了少个声明符,其类型必需相同。
var p1 = new { Id = 1, Name = "YJingLee", Age = 22 };//属性也没有须要声名var p2 = new { Id = 2, Name = "XieQing", Age = 25 };p1 = p2;//p1,p2构造雷同,可以相互赋值
正在那里编译器会以为p1,p2相称于:
public class SomeType{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }}
那么数组怎样定义呢?使用"new[]"症结字来声明数组,加上数组的初始值列表。像这样:
var intArray = new[] { 2, 3, 5, 6 };var strArray = new[] { "Hello", "World" };var anonymousTypeArray = new[] { new { Name = "YJingLee", Age = 22 }, new { Name = "XieQing", Age = 25 } };var a = intArray[0];var b = strArray[0];var c = anonymousTypeArray[1].Name;
匿名类型要面
- 能够使用new要害字调用匿实始初化器创立一个匿实类型的对于象。
- 匿名类型直交承继自System. Object。
- 匿名类型的成员是编译器依据初始化器推续而来的一些读写属性。对象取集合初始化器(Object and Collection Initializers)
- 对象初始化器 (Object Initializers) :.NET2.0框架中的类型十分依好于属性。该天生对象真例和使用新的类型时,在.Net2.0时分我们像这样写:
User user = new User();user.Id = 1;user.Name = "YJingLee";user.Age = 22;
在VS2008中,编译器会自动天天生适合的属性setter代码,使得本来几行的属性赋值操作可以在一行完成。我们可以这样简化:像这样,对象初始化器由一系列成员对象组成,其对象必需初始化,用逗号距离,使用{}封锁。
User user = new User { Id = 1, Name = "YJingLee", Age = 22 };
又例如,人把两个己加到一个基于泛型的类型为User的List聚拢中:
List<User> user = new List<User>{ new User{Id=1,Name="YJingLee",Age=22}, new User{Id=2,Name="XieQing",Age=25},};
假如有雷同名字和类型的两个对象初始化器将会发生雷同的真例,可以互相赋值。例如:
User user = new User { Id = 1, Name = "YJingLee", Age = 22 };User user2 = new User { Id = 2, Name = "XieQing", Age = 25 };user = user2;
除了在初始化类时设放简略的属性值外,对象初始化器特性也容许我们设放更庞杂的嵌套(nested)属性类型。例如我们可以在上里订义的User类型同时具有一个属于Address类型的鸣“Address”的属性:
User user = new User{ Id = 1, Name = "YJingLee", Age = 22, Address = new Address { City = "NanJing", Zip = 21000 }};
聚集始初化器(Collection Initializers):集合初始化器由一系列集合对象组成,用逗号距离,使用{}封锁。
集合初始化器可以简化把几个对象一同加加到一个聚拢,编译器会主动为您做集合拔出操做。例如我把七个数加到一个基于泛型的类型为int的List集合中
List<int> num = new List<int> { 0, 1, 2, 6, 7, 8, 9 };
对象与集合初始化器要面
对象初始化器实践上应用了编译器对对象中对外可睹的字段和属性进行按序赋值。 - 对象初始化器容许只给一部门属性赋值,包含internal拜访级别
- 对象初始化器可以联合构制函数一同使用,并且结构函数初始化先于对象初始化器施行。
- 聚集初始化器会对于初始化器中的元荤入止按序调用ICollection<T>.Add(T)方式。
- 注意对象初始化器和聚拢初始化器中成员的可睹性和调用次序。
- 对象取集合初始化器同样是一类编译时技术。
- 可爱DIV墙体手绘_1619
- DIV(转百度知道)_1420
- PHP 环境配置 Win2k3+IIS_2033
- div+css 背景图片的定位取图_1265
- 9个必须知道的实用PHP函数和功能 (3)_2059
- 利用asp+access实现简单的数据查询_58
- C# 4.0的一些新特性_1547
- ASP.NET,数据库面试题一(附答案)_2812
- ACCESS DCOUNT_16
- 利用asp+access实现简单的数据查询_58
- 10款PHP开源电子商务系统_1986
- [转]愁 纠结_47
- PHP函数动态调用的实际应用_2026
- DIV+CSS的命名_1357
- PHP初学者常见问题集(21问答)_1980
- [转]8个秘诀成为快乐家庭_374
- C#学习笔记(2)_1378
- 14条php初学者需要注意的地方_2106
- C#处理数码相片之马赛克的实现_1483
- [转]什么是失落的幸福!_498
- ASP C_3064
- Office组件把PDF文件转成Word文档_1032
- DIV网页布局中ul、ol、li、dl、dt列表元素..._1783
- Ajax+PHP检查用户名50课【php100教程】..._2462
- C#制作简易播放器_1528
- Outlook Web Access 相关的虚拟目录..._464
- ASP42酒店管理系统论文_2782
- ASP与ASP.NET的区别_2955
- C#与Flash交互_1434
- [转]看了不要纠结_122
相关文章推荐
- LINQ体验(2)--C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)--C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)--C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)--C# 3.0新语言特性和改进(上篇)
- LINQ体验(1)——C# 3.0新语言特性和改进(上篇) 【转】
- LINQ体验(2)--C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇) 【转】
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
- C# 3.0新语言特性和改进(上篇)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)