[.NET 3.x新特性五]匿名类型

简介:
今天我们来看看C#3.0中的最后一个特性:匿名类型。什么是匿名类型呢?在我们开发过程中离不开JS,JS中的变量声明就属于匿名类型。匿名类型有一个关键字var,但是在C#3.0中的匿名类型在CLR并没有改变,只是在第一次付值时进行类型的判定,而且一旦付值该变量的类型也就确定了,在后面的引用中就不能够改变了,本文和前面一样通过一些例子来说明匿名类型的使用和原理等。

    千言万语也不及一个例子,OK我们来看一个例子,在前面我们定一个Person类,并且实例化了一个List<Person>实例(可以在这一系列的文章中找到,如果你没有看过不妨观摩观摩)。我们还是拿这些来举例,代码如下:

    从上面中我们可以在智能提示中看出我们匿名类型的应用,上面的results就相当于我们IEnumerable<T>,当我们取出结果后又声明了匿名类,包含两个字段(属性)Name,NickName,并以选取的结果实例化他们;而下面的r就相当于当前类型,在智能提示中就可以看到。而在resluts和r确定类型后就不能在实例化其他类型了,OK下面让我们来好好理解一下这个关键字var。

    上面的var虽然有点像JS中的一样,但是他只是一个强类型的引用,她也是强类型的。当我们应用var来声明变量时,他只是告诉编译器这个变量的类型是在初始化时来确定他的类型,一旦确定就不能更改,否则就会抛出异常。为了更好的理解这个关键字,让我们再来看看几个例子,我们声明几个变量并对其初始化,代码如下:

1              var name  =   " 网魂小兵 " ;
2              var age  =   23 ;
3              var isMale  =   true ;

     上面声明的三个变量虽然都用var来定义,但是他的类型是不一样的,其中name为String,age为int,isMale为bool类型。var只是告诉编译器name,age,isMale在编译时来定义他的类型,也就是说在IL中的定义就是:

1               string  name  =   " 网魂小兵 " ;
2               int  age  =   23 ;
3               bool  isMale  =   true ;

     现在是不是有点理解了呢?简单的说他就是来骗我们的,但是这也有一个好处我们在用LinQ时经常都是事先不知道类型的,这样我们就可以用var而不需要预先声明一个类,但是他也会给我们的带来代码阅读性的降低。每一件事情都有它的两名性,至于如何取舍还是看大家自己的了。我觉得如果不是在预先不知类型的情况下还是用当前类型来定义比较好一点,这样可以提高代码的阅读性,但是像LinQ中在未知类型的情况下当然用var会给我带来不少的方便。

说到这里.NET3.x(C#3.0)的特性基本上就定型了,下面我要慢慢的深入理解一下LinQ的各个方法以及他的查询方法,特别是对数据库的应用,欲知后事如何,且听下回分解....

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/09/08/dotnet_3x_anonymous_types.html,如需转载请自行联系原作者

相关文章
|
12天前
|
机器学习/深度学习 存储 开发工具
【专栏】解读 .NET 技术的先进特性
【4月更文挑战第29天】.NET 技术推动各行业软件开发创新,提供高效开发环境(如Visual Studio)和跨平台能力(.NET Core),支持多语言和函数式编程。其生态系统繁荣,NuGet包含大量开源库。同时,.NET整合云服务(Azure)和机器学习(ML.NET),强化应用扩展性和智能处理,巩固其在现代开发中的关键角色。
|
4月前
|
开发框架 .NET Java
ASP.NET Core高级编程--C#基本特性(一)
本文章简略介绍C#的部分特性
|
7月前
|
开发框架 前端开发 .NET
ASP.NET Core 核心特性学习笔记「下」
ASP.NET Core 核心特性学习笔记「下」
|
7月前
|
开发框架 前端开发 中间件
ASP.NET Core 核心特性学习笔记「上」
ASP.NET Core 核心特性学习笔记「上」
|
11月前
|
C#
.NET Core反射获取带有自定义特性的类,通过依赖注入根据Attribute元数据信息调用对应的方法
.NET Core反射获取带有自定义特性的类,通过依赖注入根据Attribute元数据信息调用对应的方法
125 0
|
开发框架 .NET C#
C#版本与. NET版本对应关系以及各版本的特性
C#版本与. NET版本对应关系以及各版本的特性
447 0
|
安全 C# 索引
.NET面试题解析(05)-常量、字段、属性、特性与委托
转自:http://www.cnblogs.com/anding/p/5255492.html   常见面试题目: 1. const和readonly有什么区别? 2. 哪些类型可以定义为常量?常量const有什么风险? 3.
1303 0