导读: 我认为在变量中有两点是不得不提的,第一点比较重要的就是初始化,为什么要说这点呢,在C#中变量是一种强类型,也可以理解为强制定义...
我认为在变量中有两点是不得不提的,第一点比较重要的就是初始化,为什么要说这点呢,在C#中变量是一种强类型,也可以理解为强制定义类型,强制安全性。他的意思就是说在我们使用这个变量之前必须先规定他的类型以保证安全性。那么我们可以根据这些总结出它的特性如下:
1:变量在使用之前必须先规定他的类型并初始化;
2:变量的初始化多样性;
变量在使用之前必须规定类型并初始化。
这个其实不难理解,我以几个小例子来说明,先看下面变量的定义
int a, b;
int c = a + b;
大家想想上面的写法对吗?答案是否定的这样一定会报错。“使用了未赋值的局部变量‘a’'b'”
这就是我们的第一点,在使用这个变量之前一定要给他初始化,说到初始化,我们的方法就多了,看下面例子
1:
int a = 0; int b=10;
2:
int a=0, b=10;
3:
int a, b; a = b = 10;
好了这个我就不再多举例了,大家想想还有什么样的方法可以初始化变量吧。这点就是多样性了。
类型推断
什么是类型推断呢?这类其实主要是一个关键字Var,推断的工作是由编译器来做的,因为C#中保留了Var进行变量的初始化与定义。
这个就与JS的变量有所相同了,我们正常的定义方法是强类型,就是说会根据变量的类型来确定值的类型。然而使用Var正好相反,它是根据值的变量来确实变量的类型。下面看下例子
var number = 0;
int number = 0;
大家想一下这两个定义 的语句有什么不同,我可以肯定的告诉大家他是正确的,不要怀疑他的正确性,主要是说说有什么不同。
其实呢除了使用的关键字int与var的不同之外,就再没有什么分别了,他们的作用是相同的,可以说是等价的,即使var number = 0;从来没有声明为int,编译器也可以确定,只要他在作用域内使用,就是一个int,编译之后他们是等价的。看下面例子就明白了
var name = "张三";
var age = 26;
var isRabbit = false;
Console.WriteLine("name的类型:" + name.GetType().ToString());
Console.WriteLine("age的类型:" + age.GetType().ToString());
Console.WriteLine("isRabbit的类型:" + isRabbit.GetType().ToString());
输出的结果是
name的类型:System.String
age的类型:System.Int32
isRabbit的类型:System.Boolean
在这里也是一样的,变量也需要先初始化才能使用,和我们上面说的是 一样的规则。这点大家在使用时要注意。因为如果我们不初始化编译器就没有办法推断他的类型了。