本文介绍了c# 3.5新特性,例如对象和集合初始值设定项,匿名类型,扩展方法,Lambda 表达式等。
- var a = 1;
-
var b = "Hello, Linq!";
- var c = 2.23;
编译器根据类型推断,自动设别其变量类型,等同于如下声明形式:
- int a = 1;
-
string b = "Hello, Linq";
-
decimal c = 2.23;
注意,通过 var 关键字声明的变量,不能与用 object 声明的变量等同。var 声明的变量根据类型推断,在编译时和运行时的类型均为变量自身的真正类型;而用 object 声明的变量在编译时类型为 System.Object,并伴随一个隐式类型转换的过程。
C# 3.5新特性:对象和集合初始值设定项
该语法为简化对象和集合类型(如数组)的初始化赋值操作而产生。例如如下代码声明并初始化一个一个 List< string>。
- List< string> list = new List< string>();
-
list.Add("This");
-
list.Add("Is");
-
list.Add("A");
-
list.Add("Collection");
可以使用如下方法直接进行初始化:
- var list = new List< string>() ...{ "This", "Is", "A", "Collection" };
在任何实现了 Add 方法的类型上都可以使用集合初始值设定项。下面的示例展示了如何创建一个这样的类型。
- public class Persons ...{
-
private List< string> list = new List< string>();
-
-
public void Add(string name) ...{
- list.Add(name);
- }
-
-
static void Main() ...{
-
var p = new Persons() ...{ "1", "2", "3" };
- }
对象初始值设定项则可以更加直接的初始化一个对象的实例,例如对于 Person 类,有公开的 Name, Age 和 Height 属性,在实例化 Person 的时候,可以用如下语法形式。
- public class Person ...{
-
public string Name ...{ get; set; }
-
public int Age ...{ get; set; }
-
public decimal Height ...{ get; set; }
- }
-
-
var p = new Person ...{ Name = "Orochi", Age = 24, Height = 175 };
-
var persons = new[] ...{
-
new Person ...{ Name = "Orochi", Age = 24, Height = 175 },
-
new Person ...{ Name = "Blinda", Age = 23, Height = 165 },
-
new Person ...{ Name = "Ninicat", Age = 22, Height = 170 }
- };
代码中 persons 的类型被推断为 Person[]。
C# 3.5新特性:匿名类型
匿名类型常常用在查询表达式的结果中,因为这种类型的返回值往往是一个包含一种特定类型的 IEnumerable< T>。例如,要从上面的例子中选出年龄大于 21 岁,身高大于 160 厘米的 Person 集合,可以采用如下形式。
- var result = from person in persons where person.Age >= 21 && person.Height >= 160
-
select new ...{ Name = person.Name, Age = person.Age, Height = person.Height / 100 };
-
-
new { Name = person.Name, Age = person.Age, Height = person.Height / 100 } 是一个匿名类型,编译器将对它做如下声明。
-
-
public class _Anonymous_Name_Age_Height ...{
-
public string Name;
-
public string Age;
-
public decimal Height;
- }
C# 3.5新特性:扩展方法
扩展方法将一个在特定类型上实现的方法引入到该类型上,并可利用该类型直接调用。
例如,Count() 方法可以计算元素的个数,Count() 方法可以实现在 string、数组、集合、IEnumerable< T> 上,甚至是上文中定义的 Persons 类上。为了在 string 上实现 Count(),可以使用如下代码。
- using System.Runtime.CompilerService;
-
-
public class Extensions ...{
- [Extension()]
-
public int Count(this string source) ...{
-
int count = 0;
-
foreach (var item in source) ...{
- count++;
- }
-
return count;
- }
-
- [Extension()]
-
public int Count< T>(this IEnumerable< T> source) ...{
-
int count = 0;
-
foreach (var T in source) ...{
- count++
- }
-
return count;
- }
- }
这样,就在 IEnumerable< T> 上和 string 上都实现了 Count() 方法。我们可以象使用 IEnumerable< T> 和 string 上的成员方法一样使用扩展方法,例如:
- string s = "Hello, World!";
-
int c1 = s.Count();
-
-
List< int> list = new List< int>() ...{ 1, 2, 3, 4, 5, 6 };
-
int c2 = list.Count();
C# 3.5新特性:Lambda 表达式 Lambda 表达式是一种匿名函数结构,它可以方便的实现委托、查询综合和扩展方法的 delegate 类型参数的初始化定义。例如:
- delegate void Func(int x);
-
-
void Add(int x) ...{ x ++; }
-
-
Func f = new Func(Add);
- f(1);
可以使用更加简洁的方式实例化 f。
- Func f = (x) => ...{ x++; };
或者
- Func f = (int x) => ...{ x++; };
虽然上面的代码在实际中没有什么意义,但它为我们展示了一个更直观的委托实现方式。Lambda 表达式的基本语法为:
([[< 类型>] < 变量名>[, [< 类型>] < 变量名>]]) => { < 语句快> };
Lambda 表达式可以没有参数列表,如:
() => ...{ Console.WriteLine(""); };
C# 3.5新特性:宽松委托
宽松委托使得 C# 在判断委托实例化赋值时,对于签名不同的函数可以接受。例如 EventArgs 和 MouseEventArgs 是具备继承关系的类,当它们出现在同一个接受 EventArgs 类型参数的委托定义中时,编译器对于这两种委托都能接受。例如:
- delegate void A (object sender, MouseEventArgs e);
-
delegate void B (int a, int b);
-
- EventHandler e1, e2;
-
e1 = new A(...);
-
e2 = new EventHandler(...);
-
e1 = e2;
-
-
B b = (long a, int b) +> ...{ };
C# 3.5新特性:自动实现属性
在定义类的属性时,常常需要像下面的代码一样封装一个域。
- private string name;
-
-
public string Name ...{ get ...{ return name; } set ...{ name = value; } }
C# 3.0 提供了一种简化的属性定义方法,可以实现上述代码的作用。
- public string Name ...{ get; set; }
这就是自动实现属性。编译器自动实现类似域封装的代码。不过自动实现属性不能定义只读和只有 get 过程的属性;set 也不能具备访问性描述。
C# 3.5新特性:分部方法
分部方法允许开发人员在多个文件中定义一个类的方法。如:
-
-
public partial class A ...{
-
void B();
- }
-
-
-
public partial class A ...{
-
void B ...{ Console.WriteLine("B invoked."); }
- }
这种语法可以把函数的定义和声明分开编写。使用分部方法需要注意:
1、分部方法的类实体必须为 partial。
2、分部方法的返回值必须为 void。
3、如果没有实现分部方法,但却定义了此方法的声明,在使用这个包含分部方法的类时,编译器自动将没有实现的方法签名移除。
分享到:
相关推荐
.Net.Framework3.5开发技术详解 完整程度:99%完整 少最后8页 清晰度:一般 格式:PDF 总页数:402 内容简介 《.NET Framework3.5开发技术详解》全面讲解了.NET Framework 3.5开发中各方面的技术要点,共分19章。...
在 Newtonsoft.Json 3.5 版本中,该库主要面向 .NET Framework 3.5 平台,为开发者提供了处理 JSON 数据的强大工具。 1. **JSON 序列化与反序列化** - **序列化**:将 .NET 对象转换为 JSON 字符串。这对于将对象...
压缩包中的"framework3.5"文件可能是.NET Framework 3.5的安装程序,使用时应按照指示进行安装。通常,双击该文件即可启动安装过程,然后遵循屏幕上的提示完成安装。 总的来说,.NET Framework 3.5及SP1对于开发者...
《.Net Framework 3.5开发技术详解》第二部分涵盖了.NET Framework 3.5的核心概念、框架组件以及开发实践,是深入理解这一版本.NET Framework的重要参考资料。以下将从多个角度详细解析这一领域的关键知识点。 首先...
为了满足生成相关知识点的需求,下面将深入探讨.NET Framework 3.5的核心概念、特性以及在软件开发中的应用。 ### .NET Framework 3.5简介 .NET Framework 3.5是微软发布的一个多语言开发框架,它基于早期版本.NET...
此外,.NET Framework 3.5还增强了C#和VB.NET等编程语言的特性,如匿名方法、Lambda表达式、自动属性、扩展方法等,使得代码编写更加简洁和高效。 第一部分的教程可能涵盖了这些基本概念和技术的介绍,以及如何使用...
标签"framework 3.5 下载"进一步强调了资源的关键特性,即它是.NET Framework 3.5的下载版本,方便用户在本地安装。 压缩包内的文件名称列表包括"下载说明.htm"和"dotNetFX35_x86XP.rar"。"下载说明.htm"很可能是...
第1章 .NETFramework3.5简介 1 中文名: .NETFramework3.5开发技术详解 作者: 王毅.图书分类: 计算机与网络 资源格式: PDF 版本: 2009 出版社: 人民邮电出版社.书号: 9787115190918.发行时间: 2009年 地区: 大陆 ...
.NET Framework 3.5是在3.0版本的基础上扩展而来的,引入了几个关键的新特性。例如: 1. **LINQ (Language Integrated Query)**:这是.NET 3.5的一项重要增强,它允许开发者使用类似SQL的语法在编程语言中进行数据...
.NET CF 3.5是.NET Compact Framework的第三个主要版本,它带来了许多新特性和改进,包括对.NET Framework 3.5桌面版的许多功能的支持,如 LINQ (Language Integrated Query)、AJAX支持和改进的XML处理。 压缩包内...
通过Visual Studio,开发者可以利用.NET Framework 3.5的特性高效地构建各种类型的应用程序,包括桌面应用、Web应用和移动服务。 总结来说,.NET Framework 3.5是Windows平台上开发和运行应用程序的关键组件,而...
这使得开发者可以利用.NET 2.0引入的诸如ASP.NET、ADO.NET和Windows Forms等技术,同时享受到.NET 3.0带来的WPF、WCF和WF(Windows Workflow Foundation)等新特性。WPF是一个用于创建桌面应用程序的强大工具,而WCF...
《.NET Compact Framework 3.5版的新特性》 .NET Compact Framework 3.5是微软为嵌入式设备和移动设备开发的一款精简版.NET框架,它为开发者提供了丰富的功能和改进,使得在有限资源的平台上开发高效、功能强大的...
标题中的“Packtpub.dotNET.Compact.Framework.3.5.Data.Driven.Applications.Apr.2010.rar”表明这是一个关于.NET Compact Framework 3.5的数据驱动应用程序开发的资源压缩包,由Packtpub出版,发布于2010年4月。...
在弹出的窗口中,勾选“IIS”及其子功能,如“Web管理工具”、“万维网服务”、“应用程序开发特性”等,尤其是确保勾选了与.NET Framework 3.5相关的组件,因为VS2008和.NET Framework 3.5是紧密相连的。...
【Newtonsoft.Json.dll .NET3.5专用】是一款专为.NET Framework 3.5环境设计的JSON序列化和反序列化库。这个压缩包包含了针对.NET 3.5框架优化的特定版本,确保在该旧版框架下可以稳定运行。 JSON(JavaScript ...
8. **安全性**:.NET Framework 3.5内置了安全特性,如代码访问安全,确保只有经过授权的代码才能执行特定操作,防止恶意攻击。 9. **应用程序兼容性**:许多老版的Windows应用程序依赖.NET Framework 3.5,因此...
其中,3.0版本主要增加了WPF(Windows Presentation Foundation)、WCF(Windows Communication Foundation)、WF(Windows Workflow Foundation)和WWF(Windows CardSpace)等新特性,而3.5 SP1则在3.0的基础上...
.NET Framework 3.5是微软开发的一个全面的开发平台,用于构建、运行各种类型的桌面应用、Web应用和...对于那些依赖于.NET Framework 3.5的旧版应用程序或者需要使用特定3.5特性的项目来说,这个一键安装文件尤其有用。
这个压缩包“netframework3.5.zip”包含了一系列与.NET Framework 3.5安装相关的文件,旨在帮助用户在他们的计算机上安装这个版本的框架。 1. **.NET Framework 3.5概述** .NET Framework 3.5是在2007年发布的,它...