C# 3.0语言详解之基本的语言增强

Linq项目简介和开发环境的搭建

9月份,微软推出了一项名为 “Linq项目”的新技术,用于在.NET语言中集成数据查询的功能。您 可以从http://msdn.microsoft.com/netframework/future/得到Linq项目的技术 预览版,其中包括大量的介绍文章(英文)和C# 3.0以及VB 9.0的编译器。

Linq项目英文全称为Language Integrated Query,即“语言集成 查询”。Linq基于.NET Framework 2.0,通过对语言的改进,实现在直接 在语言中通过类似SQL语句的构造对数据源进行查询,可查询的数据源从基本的 顺序结构(如数组和链表)延伸到关系型数据库(目前是SQL Server,相信将来 可以扩展到几乎所有的关系型数据库)和XML。

C# 3.0是C#语言再一次升 级后的版本,率先实现了Linq的概念;同样实现了Linq的还有VB 9.0。从上面提 到的网址,读者可以找到两种语言的编译器的技术预览版。在本文中我们将以C# 3.0为中心讨论其开发环境的搭建和语言改进。下载得到的是一个名为 “linq preview.msi”(也可能不同)的安装包,双击之后可以和其 他软件一样进行安装,此处不再赘述。该安装包为Visual Studio 2005 Beta 2 及以后的版本和Visual C# 2005 Beta 2提供了插件(项目模板)和C#编译器, 该编译器生成的IL代码可以直接在.NET Framework 2.0上运行。在安装了该预览 版后,在新建项目对话框中项目类型列表的Visual C#节点下,我们可以看到一 个Linq Preview的条目,并可以在右边的项目模板中选择一些桌面项目模板 (Linq暂时还不支持Web项目),如下图所示:


图1 - 安装完Linq的Visual Studio 2005 新建项目对话框

只要选中了Linq中 的项目模板,我们就可以像编写其他应用程序一样在Visual Studio 2005中开始 编写C# 3.0应用程序了,在编译的时候IDE会自动为我们选择C# 3.0的编译器。

现在我们已经可以开始编写C# 3.0应用程序了,后面的章节中我就将为 大家讲解C# 3.0所带来的语言增强。值得说明的一点是,本文是一个系列文章中 的一篇,这一系列文章共三个部分。本文为第一部分,讲述C# 3.0种基本的语言 增强,这些语言增强其实是其他两个部分的基础;第二部分将讲述C# 3.0中的 Lambda表达式,这是匿名方法的自然进化形式,它不仅能将表达式体现为可执行 的方法(委托),也能将表达式体现为可以在运行时进行操作的数据结构 ——表达式树;最后一部分讲述的才是Linq项目中最核心的也是最激 动人心的内容——查询表达式,这是Linq在C#中的实现形式。同时, Linq还针对SQL查询和XML查询对.NET Framework基础类库进行了扩充,分别称作 DLinq和XLinq,这些内容我将在其他系列文章中为大家讲述。

在本文的 讲述过程中,限于篇幅,仅提供了简短的代码段而不是完整的代码。不过这些代 码段是从完整的、可正确编译和运行的代码中抽取出来的,这些完整代码可以从 这里下载,并且在本文的第5部分中有关于完整代码的介绍。

好了,废话 太多了,让我们赶快进入C# 3.0的精彩世界。

具有隐式类型的声明

在一个带有初始化器的声明语句中,待声明的变量的类型是显而易见的 ——和初始化表达式的结果类型一致。对于这种情况,在C# 3.0中可 以使用新增的关键字var来代替声明中的类型,而由编译器根据初始化表达式来 推断出变量的类型。

var i = 5; // int
var d = 9.0; // double
var s = "Hello"; // string
var a = new int [] { 1, 2, 3, 4, 5 }; // int[]
Console.WriteLine("Type of variable <i>: {0}", i.GetType());
Console.WriteLine ("Type of variable <d>: {0}", d.GetType());
Console.WriteLine("Type of variable <s>: {0}", s.GetType());
Console.WriteLine("Type of variable <a>: {0}", a.GetType());

上面的代码在C# 3.0中是符合语法规 则的,前四行代码就是使用了隐式类型的声明;而后四行代码用于在运行时验证 各个变量是否拥有正确的类型。如果在Visual Studio 2005中运行这段代码(为 了能够看到结果,请使用Ctrl+F5来编译并启动程序),会得到下面的结果:

Type of variable <i>: System.Int32
Type of variable <d>: System.Double
Type of variable <s>: System.String
Type of variable <a>: System.Int32[]

时间: 2024-11-01 21:38:54

C# 3.0语言详解之基本的语言增强的相关文章

Dijkstra算法(一) C语言详解

迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算). 此外,引进两个集合S和U.S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求出最短路径的顶点(以及该顶点到起点s的距离). 初始时,S中只有起点s:U中是除s之外的顶点,并且U中

阿里HotFix2.0升级详解——技术运营小二畅谈热修复领域那些事

在阿里HotFix2.0升级详解直播中,阿里HotFix核心开发工程师悟二从热修复背景.常见的热修复方案.阿里HotFix历程及2.0的突破与创新三个方面展开了详细的演讲.分享中,他重点介绍了百川Hotfix2.X 类.SO文件.资源文件修复方案以及管理后台服务,并对百川Hotfix 2.X将来需要新增的功能也做了展望. 以下内容根据直播视频和PPT整理而成. 热修复背景 正常Bug修复流畅包括版本上线.用户安装.发现Bug.紧急修复.重新发版.用户安装六步.该流程中存在着明显的不足,首先重新发

详解Android更改APP语言模式的实现过程_Android

一.效果图 二.描述 更改Android项目中的语言,这个作用于只用于此APP,不会作用于整个系统 三.解决方案 (一)布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" a

FLASH ActionScript语言详解

详解 - Go to 跳转到指定的帧 - Play 播放 - Stop 停止 - Toggle High Quality 在高画质和低画质间切换 - Stop All Sounds 停止所有声音的播放 - Get URL 跳转至某个超联结 - FSCommand 发送FSCommand命令 - Load Movie 装载影片 - Unload Movie 卸载影片 - Tell Target 告知目标 - If Frame Is Loaded ..判断帧是否被完全载入 - On Mouse Ev

邻接矩阵无向图(一) C语言详解

邻接矩阵无向图的介绍 邻接矩阵无向图是指通过邻接矩阵表示的无向图. 上面的图G1包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"(A,C),(A,D),(A,F),(B,C),(C,D),(E,G),(F,G)"共7条边.由于这是无向图,所以边(A,C)和边(C,A)是同一条边:这里列举边时,是按照字母先后顺序列举的. 上图右边的矩阵是G1在内存中的邻接矩阵示意图.A[i][j]=1表示第i个顶点与第j个顶点是邻接点,A[i][j]=0则表示它们不是邻接

邻接表无向图(一) C语言详解

邻接表无向图的介绍 邻接表无向图是指通过邻接表表示的无向图. 上面的图G1包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"(A,C),(A,D),(A,F),(B,C),(C,D),(E,G),(F,G)"共7条边. 上图右边的矩阵是G1在内存中的邻接表示意图.每一个顶点都包含一条链表,该链表记录了"该顶点的邻接点的序号".例如,第2个顶点(顶点C)包含的链表所包含的节点的数据分别是"0,1,3":而这"

邻接矩阵有向图(一) C语言详解

邻接矩阵有向图的介绍 邻接矩阵有向图是指通过邻接矩阵表示的有向图. 上面的图G2包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"<A,B>,<B,C>,<B,E>,<B,F>,<C,E>,<D,C>,<E,B>,<E,D>,<F,G>"共9条边.   上图右边的矩阵是G2在内存中的邻接矩阵示意图.A[i][j]=1表示第i个顶点到第j个顶点是一条边

详解SQL四种语言:DDL DML DCL TCL_Mysql

看到很多人讨论SQL还分为四种类型,在这里知识普及一下,并总结下他们的区别吧. 1. DDL – Data Definition Language 数据库定义语言:定义数据库的结构. 其主要命令有CREATE,ALTER,DROP等,下面用例子详解.该语言不需要commit,因此慎重. CREATE – to create objects in the database   在数据库创建对象 例: CREATE DATABASE test; // 创建一个名为test的数据库 ALTER – a

C++中运算符 &amp;和&amp;&amp;、|和|| 的详解及区别_C 语言

C++中运算符 &和&&.|和|| 的详解及区别 简介: &&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型 &与| 既可以进行逻辑运算,又可以进行位运算,两边既可以是bool类型,又可以是数值类型 区别: if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了. if (A & B) 如果 A 为 false ,整个表达式就为 false,但还要计算 B 的值