相关文章:.net framework3.5新特性1:Lambda表达式
一、用var定义变量
在C#3.0中提供了一种新的声明变量的方式,这就是var。 通过这个关键字,在声明变量时就无需指定类型了,变量类型是在初始化时由编译器确定 的。代码如下:
var ss="abcd";
MessageBox.Show(ss.GetType().ToString());
上面的代码将显示 System.String,从而证明C#编译器已经将ss编译成了String变量了。而在输出ss后,再 输入“.”后,会看到将String类型变量的相应方法和属性也列出来了,因此 可以断定,C#将ss看成了String类型,而不是Object。所以使用var定义变量同时可以拥 有Object和强类型的优点。
不过大家不要将var看成是javascript的var,它们的 区别是,javascript是弱类型的语言,而且javascript中的变量(也包括用var声明的变 量)可以变换类型,如下面的javascript所示:
var s="abcd";
s=3;
alert(s);
上面的代码第一次给s赋了一个字符串,而 第二行代码又给赋了一个整数。这样的代码在javascript中没有任何问题。但在C#3.0中 ,var变量一但被初始化,确定类型后,就无法改变类型了。如下面的代码是无法编译通 过的:
var ss="abcd";
ss=44;
综上所述,在使用var定义变量时有以下四个特点:
1.必须在定义时初始化。也就是必须是var s = “abcd”形式,而不 能是如下形式:
var s;
s=“abcd”;
2.一但初始化完成,就不能再 给变量赋与初始化值类型不同的值了。
3.var要求是局部变量。
4.使用var 定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。但笔者建议如 果事先知道变量的类型,尽量使用强类型方式来声明变量。否则,就会造成由于大量使用 var,而使得开发人员很难断定某个变量是什么类型。这样不利于程序的维护和升级。
虽然var有利有弊,但笔者个人认为,如果将动态语言转换成C#语言,可以考虑使 用var来定义变量。这是因为动态语言没有类型,而要将其转换成强类型的C#语言,就必 须给变量指定个类型,但事先确定类型是很费劲的,不如将其指定成var,再由C#编译器 去确定变量的具体类型。那么如果在转换的过程中,发现动态语言的变量改变了类型,该 怎么办呢?这个可以使用第三部分要讲的“匿名类”来解决这个问题。
二、初始化
如果一个类有public字段,在建立类的对象实例时可以使用下 面的代码来初始化这些字段;
public class MyClass{ public String field1; public int field2; public bool field3;}
MyClass my = new MyClass();
my.field1 = “abcd”;
my.field2 = 44;
my.field3 = true;
在C#3.0中提供了一种更简便的方法来初始化这些public变量,代码 如下:
MyClass my=new MyClass
{
field1=“abcd”,
field2=44;
field3=true;
};
上面的代码的写法有些象带 参数的构造方法,但这将不是调用了MyClass的构造方法(因为MyClass并没有带三个参数 的构造方法),而只是C#编译器玩的一个魔术。实际上,上面的代码在编译后,仍然和使 用传统的初始化字段的方法一样。只是在语法上看起来更简单(至少不用写那么多个my) 。要注意的的,使用这种方法初始化,必须是public的字段(不能是protected、private 或默认修饰符的字段)。
在C#3.0中还改进了对集合类的初始化方式(使其初始化 的方式类似于数组)。但遗憾的是,这种初始化方式只支持用泛型的集合类,也就是说, 只有实现了System.Collections.Generic.ICollection<T>的集合类才可以使用这 种初始化方法。代码如下:
List<string>myList=new List<string> {"data1","data2","data3"};
foreach (string data in myList)
{
textBox1.AppendText(data);
}
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 变量
, 方法
, 代码
, 类型
, var
, net类型初始化
, 类变量初始化
javascript类和对象
.net framework 4.0、.net framework 4.5、.net framework 2.0、.net开发、.net是什么,以便于您获取更多的相关知识。