.net framework3.5新特性2:var、初始化、匿名类和扩展方法

相关文章:.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是什么,以便于您获取更多的相关知识。

时间: 2024-12-06 01:41:20

.net framework3.5新特性2:var、初始化、匿名类和扩展方法的相关文章

.net framework3.5新特性(1):var、初始化、匿名类和扩展方法

 本文为原创,如需转载,请注明作者和出处,谢谢! 一.用var定义变量     在C#3.0中提供了一种新的声明变量的方式,这就是var.通过这个关键字,在声明变量时就无需指定类型了,变量类型是在初始化时由编译器确定的.代码如下:   var ss = "abcd"; MessageBox.Show(ss.GetType().ToString());   上面的代码将显示System.String,从而证明C#编译器已经将ss编译成了String变量了.而在输出ss后,再输入"

C# 3.0语言新特性(语言规范):2 扩展方法

规范 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P 扩展方法(Extension Methods)是一种静态方法,可以通过实例方法的语法进行调用.从最终效果上看,扩展方法使得扩展一个现有类型和构造一个具有附加方法的类型变成了现实. 注意 扩展方法很难发觉,并且比起实例方法在功能性上有很大限制.出于这些原因,我们建议保守地使用扩展方法,仅在实例方法不大可行或根本不可行的时候才使用. 扩展成员的其他类型,如属性.事件和运算符都在考虑之中

asp.net C# 3.0 新特性 学习(二):匿名类型、扩展方法

这两天看了一下msdnwebcast上的visual studio 2008的系列课程,记录下所学的知识,以便加深记忆 1.匿名类型 顾名思义 匿名类型就是没有名字的类型.在C#3.0中允许我们在程序中声明一个临时的类型来存储数据,例如:    代码如下 复制代码 class Program      {          static void Main(string[] args)          {              //声明一个匿名对象,拥有 Name和Age 属性      

一起谈.NET技术,.NET 4的新特性:图表、SEO及可扩展的输出缓存

即将发布的.NET Framework 4.0拥有众多的新改进,此前InfoQ已经对其进行了详尽的报道.本文将再来揭示.NET 4.0中的3个新特性:图表控件.SEO支持以及ASP.NET 4可扩展的输出缓存. 图表控件 微软向开发者提供了大量可免费下载的图表控件,可以在.NET 3.5 ASP.NET或WinForms项目中使用这些控件.要想在Visual Studio 2008中使用这些控件则需要安装一个插件,该插件提供了VS工具箱及智能集成功能.现在这些控件已经集成到了.NET 4.0中,

.NET 4的新特性:图表、SEO及可扩展的输出缓存

即将发布的.NET Framework 4.0拥有众多的新改进,此前InfoQ已经对其进行了详尽的报道.本文将再来揭示.NET 4.0中的3个新特性:图表控件.SEO支持以及ASP.NET 4可扩展的输出缓存. 图表控件 微软向开发者提供了大量可免费下载的图表控件,可以在.NET 3.5 ASP.NET或WinForms项目中使用这些控件.要想在Visual Studio 2008中使用这些控件则需要安装一个插件,该插件提供了VS工具箱及智能集成功能.现在这些控件已经集成到了.NET 4.0中,

.net framework3.5新特性1:Lambda表达式

在C#2.0及C#1.x中,需要使用delegate来定义方法指针.如下面的代码如示: public delegate bool Filter(int num); // delegate类型 public int[] searchArray(int[] values, Filter filter) { List<int> result = new List<int>(); foreach (int i in values) { if (filter(i)) result.Add(i

.net framework3.5新特性(2):Lambda表达式

 本文为原创,如需转载,请注明作者和出处,谢谢!    在C#2.0及C#1.x中,需要使用delegate来定义方法指针.如下面的代码如示: public delegate bool Filter(int num);  // delegate类型 public int[] searchArray(int[] values, Filter filter) {     List<int> result = new List<int>();    foreach (int i in v

C# 3.0新特性初步研究 Part5:匿名类型

匿名类型(Anonymouse Type)--这年头什么多系都匿名了 : )在初始化的时候根据初始化列表自动产生类型的一种机制. 典型的代码:1class Program2    {3        static void Main(string[] args)4        {5            var x = new { a = 3, b = 5, c = "some text" };6            Console.WriteLine(x.a.ToString()

JavaScript1.6数组新特性介绍以及JQuery的几个工具方法_javascript技巧

JavaScript 1.6 引入了几个新的Array 方法,具体的介绍见:New in JavaScript 1.6 .这些方法已经被写进了ECMA262 V5.现代浏览器(IE9/Firefox/Safari/Chrome/Opera)都已经支持,但IE6/7/8不支持.jquery的工具方法中提供了类似的功能. 1.Array.forEach()和jquery的$().each().在数组中的每个项上运行一个函数.类似java5 增强的for循环. 复制代码 代码如下: var ary =