C#3.0语言新特性之隐式类型

20.1 隐式类型

在C#3.0中增加了一个变量声明var,这个声明和JavaScript 的var类似,但 也有不同。相同之处是它可以用var来声明任何类型的局部变量;而不同之处在 于它仅仅负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而 且只能是局部变量。

20.1.1 隐式类型局部变量的声明与使用

在C# 3.0中,引进了一个新的关键字叫做var。var允许你声明一个新变量, 它的类型是从用来初始化器变量的表达式里隐式的推断出来的,即在声明时,你 不需要给它定义类型,它会根据它的初始化器表达式来推断出它的类型。因此, 我们称它为隐式类型。如你可以这样来声明变量:

var i = 10; //声明一个局部变量。

这一行使用了10来初始化变量i。注意这里i被强类型到整型,它不是一个对 象或者VB6的变量,也不带有其他对象或者变量的负载。

为了保证使用var关键字进行声明的变量的强类型特性,C#3.0要求你必须对 变量赋初值(初始化),并且放到的同一行。同样,初始化值必须是一个表达式 ,不能是一个对象或者collection初始化器,也不能为null 。如果多个声明符 对同一个变量存在,那么它们必须在编译时被看作为相同类型。

如下面的声明都是合法的:

var i = 5;

var s = "Hello";

var a = new[] { 0, 1, 2 };

var expr =

      from c in customers

      where c.City == "London"

      select c;

var anon = new { Name = "Terry", Age = 34 };

var list = new List<int>();

最后我们需要了解的一点是,var 关键字并不意味着“变体”,也不表示 该变量是松散类型化变量或后期绑定变量。它只是表示由编译器确定和分配最适 当的类型。

时间: 2024-09-13 00:59:52

C#3.0语言新特性之隐式类型的相关文章

C#3.0新特性之隐式类型局部变量的使用

变量 首先说明一下,此新特性的专题基于MS五月份分布的C#3.0规范,但是官方中文版还没有出来,结合自己的实践和理解,希望能和大家一起分享某些前沿的东东,很有可能一些地方会出错,望抛砖. 在C# 3.0里面, 可以对局部变量进行隐式类型声明, 就是在声明时可以不指定该变量的类型, 变量在初始化的时候会由编译器从表达式的上下文中推出真正的类型, 对开发者来说, 无疑是简化了很多, 主要是通过新的关键字var, 有如下面的例子: var i = 5;var s = "Hello";var

C# 3.0语言新特性(语言规范):1 具有隐式类型的局部变量

变量|规范 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P 在一个具有隐式类型的局部变量声明(implicitly typed local variable declaration)中,被声明的局部变量的类型是通过初始化该变量的表达式推断出来的.当使用局部变量声指示符符var来代替类型,并且当前作用域内没有名为var的类型时,这个声明便成为一个具有隐式类型的局部变量声明.例如: var i = 5; var s = "Hel

C# 3.0语言新特性(语言规范):6 具有隐式类型的数组

规范|数组 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P 数组创建表达式的语法被扩展为支持具有隐式类型的数组创建表达式: array-creation-expression:...new  [  ]  array-initializer 在一个具有隐式类型的数组创建表达式中,数组实例的类型通过数组初始化器中指定的元素来推断.特别地,数组初始化器中的表达式类型形成的集合中,必须恰好有一个类型使得其他类型都可以隐式地转换为该类型,并且该

C# 3.0语言新特性(语言规范):3 拉姆达表达式

规范 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P C# 2.0中引入了匿名方法,允许在期望出现委托的时候以"内联(in-line)"的代码替代之.尽管匿名方法提供了函数式编程语言中的很多表达能力,但匿名方法的语法实在是太罗嗦了,并且很不自然.拉姆达表达式(Lambda expressions)为书写匿名方法提供了一种更加简单.更加函数化的语法. 拉姆达表达式的书写方式是一个参数列表后跟=>记号,然后跟一个

C# 3.0语言新特性(语言规范)

规范 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P C# 3.0(C# Orcas--魔鬼)在C# 2.0的基础上引入了很多语言扩展,用以支持高级别的函数式风格类库的创建和使用.这些扩展使得结构性API构造具有与其他领域(如关系数据库和XML)中查询语言同等的表达能力.这些扩展包括: 具有隐式类型的局部变量,允许通过用于初始化的表达式来推断局部变量的类型. 扩展方法,使得对一个现存类型的扩展和构造具有附加方法的类型变为现实. 拉姆达

C# 3.0语言新特性(语言规范):4 对象和集合初始化器

对象|规范|集合 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P 一个对象创建表达式可以包含一个对象或集合初始化器,用于初始化新创建的对象的成员或新创建的集合的元素. object-creation-expression:new  type  (  argument-listopt  )  object-or-collection-initializeroptnew  type  object-or-collection-initia

C#3.0语言新特性之对象和集合初始化器

在C#3.0中,一个对象创建表达式可以包含一个对象或集合初始化器,用于初 始化新创建的对象的成员或新创建的集合的元素. 对象创建表达式: new type (argument-list(可选)) 对象或集合初试化器(可选) new type 对象或集合初试化器 一个对象创建表达式可以省略构造器参数列表,并将其连同圆括号一起替换 为一个对象或集合初始化器.省略构造器参数列表并将其连同圆括号一起替换为 一个对象或集合初始化器等价于指定一个空的参数列表. 在执行一个带有对象或集合初始化器的对象创建表达

C#3.0 新特性之隐式类型化数组

C#3.0这个特性是对隐式类型化本地变量的扩展,有了这个特性,将使我们创建数组的工作变得简单.我们可以直接使用"new[]"关键字来声明数组,后面跟上数组的初始值列表.在这里,我们并没有直接指定数组的类型,数组的类型是由初始化列表推断出来的. class AnonymousTypeArray : AppRunner.AbstractApplication { public override void Run() { var intArray = new[] { 1, 2, 3, 4,

C# 3.0语言新特性(语言规范):7 查询表达式

规范 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P 查询表达式(Query Expression)为查询提供了一种语言集成的语法,这种语法类似于关系和分级查询语言,如SQL和XQuery. query-expression:from-clause  query-body from-clause:from  from-generators from-generators:from-generatorfrom-generators  ,