专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » 变量类型:C#3.0中实现隐式类型变量、匿名类型的方法 »正文

变量类型:C#3.0中实现隐式类型变量、匿名类型的方法

来源: 发布时间:星期四, 2009年2月12日 浏览:102次 评论:0


隐式类型变量 (Implicitly typed local variables) 
象下面代码书写就是隐式类型变量 
var i = 5;
var str = “Csharp”
var numbers =  {1,2,3};
var orders =  .Collections.Hashtable;
var orders1 =  Dictionary
var i = xxx ; 作用就是用 xxx 类型声明为i类型并给i 赋值
由于声明时候需要依赖于等号右边表达式所以必须同时赋值否则下面书写就会报: Error Implicitly typed locals must be initialized 
var gg; 
使用 Implicitly typed local variables 时应遵守下列约束:
1. The declarator must  an initializer 
声明时必须包含化器 
2、The initializer must be an expression. The initializer cannot be an object or collection initializer by itself, but it can be a  expression that s an object or collection initializer.
化必须是个表达式化表达式不能包含它自身
但是可以是包含个对象或集合化器表达式(即匿名类型) 
3、The compile-time type of the initializer expression cannot be the null type.
化器表达式编译期类型不可以是空(null)类型
比如:
var gg = null; 这行代码就会报: Cannot assign ’’ to an implicitly typed local 
4、If the local variable declaration s multiple declarators, the initializers must all have the same compile-time type.
如果局部变量声明包含了多个声明符这些声明符必须具备同样编译期类型中国自学编程网 www.zxbc.cn  
比如如下代码: 
var n = \"java\"
var m = 4;
var ff = m + n; 
Console.WriteLine(ff);
Console.WriteLine(ff.GetType); 
打印出来信息会是:
4java
.String 
5. The initializer cannot refer to itself. (化中不能提起它自身) 
隐式类型变量使用范围它可不是到处能用仅仅可以用于下面 4种情况
1. 局部变量声明
2. for 语句中变量声明)
3. using 语句化变量时. 
4. foreach 中iterator类型声明)  [Page]
比如下面代码就会报错: 
 Program
{
private var tmp = \"java\"
}
The contextual keyword ’var’ may only appear within a local variable declaration 
隐式类型变量实际是编译器干活(编译器局部变量类型从化它们表达式推导而来)所以 
var i = 5; 这样代码编译后用 Reflector 再反编译看到是:
 i = 5; 


匿名类型(Anonymous Types)
匿名类型是从对象化器自动推导和创建元组(tuple)类型 
var o =  {Name = \"Hello\", Age = 23 };
var Arr =  {3,1,4,1,5} ; 
就是 匿名类型种书写 
注意: 
var Arr =  {3,1,4,1,5} ; 是匿名类型当然也是 隐式类型变量 
var Arr =   {3,1,4,1,5} ; 是隐式类型变量 
匿名类型 和 隐式类型变量 区别 
隐式类型变量 指我们可以通过等号右边表达式推断出等号左边该是那种类型 
匿名类型则是指根据这个类型我们可以推导出和创建出这个类型例子 
这两个特性很多时候是起作用 
比如:  {Name = \"Hello\", Age = 23 }这个表达式类型是匿名因此o就会变成那个匿名类型
其中 Name = \"Hello\" 又可以看作是 隐式类型变量 
不过应该没有人会用var i = 10;这样看起来像jscript语法所以var基本上就是为匿名类型而生 . 
介绍说明: 
以上信息都是基于 Orcas Beta 1 也许正式版时候会发生变化 

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: