- 浏览: 324351 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
杞哈哈:
你好。我是个新手。去官网也没下载下来那个服务器端。有现成的吗? ...
初探JAXER -
sl514:
http://www.bejson.com
JSON学习 -
sl514:
你可以使用JSON在线格式化、校验、视图工具 http://w ...
JSON学习 -
srg23:
好像在FF下不兼容。
教你怎么使网页全部变成灰色的! -
vera_sq:
你的方法我试过,还是不行呢!
AJAX技术使用XMLHttpRequest对象传递参数的中文乱码问题
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;//int var j = 23.56;//double var k = "C Sharp";//string var x;//错误 var y = null;//错误 var z = { 1, 2, 3 };//错误
在调试状态下,编译器解释如下
隐含类型局部变量要点
- var为关键字,可以根据后面的初始化语句自动推断类型,这个类型为强类型。
- 初始化语句必须为表达式,不可以为空。且编译时可以推断类型。一旦初始化之后,只可以存储这种类型。
- var声明的仅限于局部变量,不可用于字段。亦可以用于for,foreach,using 等语句中。
- 数组也可以作为隐含类型。
- 初始化语句不能是一个自身的对象或者集合初始化器,但是他可以是包含一个对象或者初始化器的一个new表达式。
- 如果局部变量声明包含了多个声明符,其类型必须相同。
匿名类型(Anonymous Types)
匿名类型允许定义行内类型,无须显式定义类型。常和var配合使用来声明匿名类型。
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)方法。
- 注意对象初始化器和集合初始化器中成员的可见性和调用顺序。
- 对象与集合初始化器同样是一种编译时技术。
发表评论
-
vs2005操作水晶报表(入门示例)
2008-06-27 17:14 6610vs2005操作水晶报表(入 ... -
C# 字符串DES加/解密与MD5加密类
2008-06-10 17:02 5652C#源码,用.Net封装的类库写的加密和解密的方法,很容易转换 ... -
打印gridview
2008-06-10 16:01 2750打印指定内容: 代码就是这样的. <html> ... -
ASP.NET验证控件祥解
2008-06-10 01:56 1490ASP.NET是微软推出的下一代WEB开发工具,其强大的功能立 ... -
ASP.Net中MD5和SHA1加密的几种方法
2008-06-10 01:55 1643首先简单介绍一下MD5和SHA1:MD5的全称是Message ... -
Asp.net中的日期处理函数
2008-05-22 14:33 1090//2007年4月24日 this.Te ... -
LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Av
2008-05-14 18:02 5602顺便说了一下Where操作 ... -
LINQ简介和LINQ to SQL语句之Where
2008-05-14 17:21 1866查询表达式(LINQ)简介 在 ... -
C# 3.0新语言特性和改进(下篇)
2008-05-14 17:05 1310上一篇我们介绍了C# 3.0 ... -
C#SQL数据库操作类
2008-05-13 12:31 2682using System;using System.Confi ... -
C#.net常用函数和方法集汇总
2008-05-13 12:27 9731、DateTime 数字型 System.D ... -
ASP.NET应用程序设计的10大技巧
2008-05-13 12:27 992在本篇文章中,我们将讨论编程人员在使用ASP.NET开发应用程 ... -
asp.net开发常用技巧收集
2008-05-13 12:25 14291. 打开新的窗口并传送参数: 传送参数: response. ... -
C#DateTime函数
2008-05-13 12:24 20811、DateTime 数字型 System.DateTime ... -
c#加密 可逆与不可逆MD5 加密
2008-05-13 11:57 42621、方法一 (不可逆加密) srxljl publ ... -
对MemoryStream进行压缩、加密
2008-05-13 11:50 2292在应用DeflateStream 或GZipStream进行压 ... -
内存流MemoryStream
2008-05-13 11:41 3685编程访问文件是通过文件流对象进行的,当应用程序需要访问文件时, ... -
.net验证码 创建 CreateRandomCode CreateImage
2008-05-13 11:03 2063新建一个专门用来创建验证码图片的页面image.aspx它的 ... -
一步一步学Linq to sql(一):预备知识
2008-05-13 09:34 898什么是Linq to sql Linq to ... -
ASP.net初学者常用知识
2008-05-10 01:23 1167一位ASP.net初学者学习过程中整理的备忘录,包括“打开新的 ...
相关推荐
C# 3.0是.NET Framework 3.5的一部分,带来了许多新的语言特性和改进,旨在提高开发效率和代码简洁性。以下是对这些特性的详细解释: 1. **自动属性(Auto-Implemented Properties)** 自动属性是C# 3.0引入的一个...
C# 3.0是微软推出的面向对象编程语言的一个重要版本,它在C# 2.0的基础上进行了许多改进和新增了多个语言特性。本文档将深入探讨C# 3.0的关键特性,并与C# 2.0进行对比。 1. **泛型**:在C# 2.0中引入的泛型为代码...
C# 3.0 是微软推出的面向对象编程语言的一个重要版本,它在C# 2.0的基础上进行了诸多改进和扩展,为开发人员带来了许多新的特性和功能。这份"Microsoft C# 3.0 Language Specification"是官方提供的权威文档,详细...
### C# 3.0 新特性详解:基于 .NET 2.0 的改进 #### 一、概述 C# 3.0 是一种面向对象的编程语言,它为开发人员提供了一种简洁、高效的方式来构建应用程序。随着 .NET 框架的发展,C# 3.0 在 .NET 2.0 基础上引入了...
这本书覆盖了C# 3.0版本的所有新特性与基本概念,对于希望掌握这门现代化、面向对象的编程语言的读者来说,是一本不可多得的资源。 ### C# 3.0简介 C# 3.0是微软在.NET Framework 3.5中推出的重要更新,它引入了...
这本书是C#开发者的重要参考资料,涵盖了C# 3.0的新特性和核心概念,旨在帮助程序员理解和掌握这个强大的.NET框架语言。 C# 3.0在C# 2.0的基础上引入了许多创新性功能,其中最显著的是对面向服务编程的支持和语言...
C# 3.0对泛型进行了改进,支持泛型接口和泛型委托,增加了类型约束,如`where T : class`或`where T : struct`,提高了代码的复用性和类型安全性。 五、其他特性 1. 部分类型(partial types):允许将大型类定义...
【标题】:“vs2008视频教程 2 C#3.0与VB9.0的新特性介绍” 本视频教程聚焦于Visual Studio 2008中的编程语言C# 3.0和Visual Basic 9.0的最新特性。Visual Studio 2008作为微软开发工具的重要组成部分,它在提升...
C# 3.0是.NET Framework 3.5的一部分,引入了许多新的特性和改进,使得C#在编程效率和灵活性上有了显著提升。这本书详细阐述了这些新特性,旨在帮助开发者掌握更高级的编程技巧和最佳实践。 首先,C# 3.0的重要更新...
C# 3.0是.NET Framework 3.5的一部分,发布于2007年,引入了许多创新性特性和改进,极大地提升了开发人员的工作效率和代码的可读性。在这个版本中,C#语言主要关注了面向对象编程的增强、语言集成查询(LINQ)以及...
C# 3.0是微软推出的面向对象编程...总之,C# 3.0语言配置的改进极大地增强了C#的灵活性和生产力,使开发者能以更高效、更优雅的方式编写代码。通过学习和应用这些特性,开发者可以构建出更加健壮、可维护的软件系统。
C# 3.0是微软开发的面向对象的编程语言的一个重要版本,它在C# 2.0的基础上增加了一些显著的新特性和扩展。官方语言规范详细定义了C# 3.0的所有语法、语义以及编程模型,是开发者理解和掌握C# 3.0的关键资源。 1. *...
C# 3.0 是微软推出的面向对象编程语言的一个重要版本,它在C# 2.0的基础上进行了诸多改进和扩展,引入了多项创新特性,为.NET Framework 3.5的一部分。在这本完全参考手册中,我们将深入探讨C# 3.0的关键知识点。 1...
根据提供的文件信息,本文将围绕"C#3.0本质论"这一主题展开,深入探讨C#3.0版本的关键特性、改进以及它在.NET框架中的应用。虽然提供的链接无法直接访问,但我们可以基于标题和描述中提及的信息进行讨论。 ### C#...
《精通C#3.0与.NET 3.5高级编程》是一本专注于深入理解C#语言和.NET Framework 3.5平台的高级技术书籍。通过实例下载,读者可以亲自动手实践,加深对理论知识的理解。 C# 3.0是微软在.NET Framework 3.5中引入的...
C# 3.0是微软.NET Framework 3.5的一部分,它引入了许多创新特性,显著提升了C#作为编程语言的灵活性和效率。本系列课程旨在深入讲解这些新特性,帮助开发者充分利用C# 3.0的功能,提升开发效率和代码质量。 首先,...
C# 3.0是.NET Framework 3.5的一部分,引入了一系列重要的新特性,极大地提升了开发效率和代码的可读性。以下是对这些特性的详细解释: **1. 隐式类型局部变量 (Implicitly typed local variables)** 在C# 3.0中,...
从给定的文件信息来看,我们主要关注的是关于C# 3.0语言定义文档的知识点,这涉及到C#编程语言的重要更新与特性。C# 3.0是微软在.NET框架下推出的一种面向对象的编程语言,它在C# 2.0的基础上进行了大量的改进和增强...
C# 3.0语言规范是微软为C#编程语言制定的一套详细的语法和语义规则,它定义了程序员如何编写、编译和运行C#程序。这份规范旨在确保跨平台和跨工具的代码一致性,使得开发者能更好地理解和利用C#的强大功能。以下是...