C# notes (1)

一、 C#静态字段与C#实例字段

  C#的字段有静态字段和实例字段两种,字段进行的是引用传递,可以是任何类型。静态字段是属于类的,实例字段是属于对象的。如下:

private static int first = 0//声名一个静态字段  
private int second = 0//声名一个实例字段  
static void Main(string[] args)  
{  
    Program instance 
= new Program(); //建立对像引用,并实例化。  
    Console.WriteLine(instance.second); //用对像来访问字段j  
    Console.WriteLine(Program.first); //静态字段需要用类名来访问  
} 

 

  readonly关健字是用来声名一个只读字段的,也就是说字段是不充许被改写的,不过有个例外,在构造函数中,是可以对只读字段进行改写。

 

二、var匿名类型和隐式类型变量

  使用 隐式类型变量Implicitly typed local variables 时应遵守下列约束:

  1、声明时必须包含初始化器。

  2、初始化必须是一个表达式。初始化表达式不能包含它自身,但是可以是包含一个对象或集合初始化器的一个new表达式(即匿名类型)。

  3、初始化器表达式的编译期类型不可以是空(null)类型。比如: var aa = null; 这行代码就会报错误: Cannot assign '' to an implicitly typed local

  4、如果局部变量声明包含了多个声明符,这些声明符必须具备同样的编译期类型。比如:

var m = 4;
var n 
= "string"
var res 
= m + n;

Console.WriteLine(res); 
//输出为:4string
Console.WriteLine(res.GetType()); // 输出为:System.String

  5、初始化中不能提起它自身。隐式类型变量的使用范围,不是到处能用。仅仅可以用于下面四种情况

    局部变量声明;for 语句中变量声明;using 语句初始化变量时;foreach 中iterator类型声明

  比如下面代码就会报错:

class Program 

    
private var tmp = "string";

//The contextual keyword 'var' may only appear within a local variable declaration

  6、下面的代码就是隐式类型变量:

var i = 5;
var str 
= "Csharp";
var numbers 
= new int[]{1,2,3};
var orders 
= new System.Collections.Hashtable(); 
var orders1 
= new Dictionary(); 

 

  匿名类型(Anonymous Types)

  匿名类型,是从对象初始化器自动推导和创建的元组(tuple)类型。如:

var person = new {Name = "lei", Age = 23 }; 
var intArr 
= new[] {3,1,4,1,5} ;

 

  var intArr = new[] {3,1,4,1,5} ;  是匿名类型,当然也是隐式类型变量

  var intArr = new int[] {3,1,4,1,5} ;  是隐式类型变量

  

  匿名类型 和 隐式类型变量 的区别

  隐式类型变量 指我们可以通过等号右边的表达式,推断出等号左边该是那种类型。匿名类型则是指,根据这个类型的初始化函数,我们可以推导出和创建出这个类型的实例。这两个特性很多时候是一起作用的。比如: new {Name = "lei", Age = 23 }这个表达式的类型是匿名的,因此person就会变成那个匿名类型。其中的 Name = "lei" 又可以看作是隐式类型变量。

 

Go to my home page for more posts

posted on 2010-01-07 18:20  lantionzy  阅读(333)  评论(1编辑  收藏  举报