C# notes (1)
一、 C#静态字段与C#实例字段
C#的字段有静态字段和实例字段两种,字段进行的是引用传递,可以是任何类型。静态字段是属于类的,实例字段是属于对象的。如下:
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 n = "string"
var res = m + n;
Console.WriteLine(res); //输出为:4string
Console.WriteLine(res.GetType()); // 输出为:System.String
5、初始化中不能提起它自身。隐式类型变量的使用范围,不是到处能用。仅仅可以用于下面四种情况
局部变量声明;for 语句中变量声明;using 语句初始化变量时;foreach 中iterator类型声明
比如下面代码就会报错:
{
private var tmp = "string";
}
//The contextual keyword 'var' may only appear within a local variable declaration
6、下面的代码就是隐式类型变量:
var str = "Csharp";
var numbers = new int[]{1,2,3};
var orders = new System.Collections.Hashtable();
var orders1 = new Dictionary();
匿名类型(Anonymous Types)
匿名类型,是从对象初始化器自动推导和创建的元组(tuple)类型。如:
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" 又可以看作是隐式类型变量。