VS2008(Framework 3.0, 3.5) 部分新特性
大部分来自Scott Gu的blog。
代码编辑器
1. using语句的组织,可以排序、删除掉没有使用的using。
2. 智能感应窗口透明化。出现智能感应窗口后,按下Ctl键使窗口透明化,例如下面左边的图,智能感应窗口几乎看不到了。
3. 如上面右边的图,在Solution Explorer中,右键菜单可以选择使用Windows Explorer直接打开对应的Windows文件夹,这个功能也是比较方便的,因为经常需要打开目录结构比较深的文件夹,以前老是把当前项目文件夹做一个快捷方式拉到桌面上,现在省了。据说这是VS2008在Vista上的一个特性,不知道在XP里面是否可以。
JavaScript的智能感应
1. JavaScript的智能感应比较符合W3C标准,例如在智能感应里面,document对象没有all属性,window对象没有event属性。
2. 例如JavaScript中,使用document.getElementById("form1"),随后出现的智能感应是html form的属性方法;使用document.getElementById("textbox1")随后出现的智能感应是html textbox的属性和方法。
3. C#中,方法、类可以添加注释说明,在使用的地方,智能感应中能够显示相关注释说明,08中的JavaScript也可以。不过目前的beta版本只支持在独立的.js等文件中定义的函数才支持这种提示,估计是考虑同一个页面中的函数没有必要,而对于第三方的JavaScript库、公共的JavaScript库文件才有意义。如果JQuery等改成VS08支持的这种注释方式,用起来就舒服了。
例如,添加一个JScript.js文件,如下定义一个函数(注释不会像C#一样自动填充出来,需要手写,但书写方式与C#中一样,目前只支持几个主要的注释节点):
4. 引入外部JavaScript库的提示。
在aspx文件中,像上面例子使用script标签引用进来就可以。
如果是在自己的JavaScript库中,例如在项目的一个common.js中,需要VS对jQuery、interface函数提供智能感应,只需要在common.js文件开始位置加入下面语句就可以。
Web Designer、CSS Property Manager、JavaScript Debuging
1. Web设计器支持代码、设计视图分割显示风格,CSS Property Window能比较直接的查看CSS样式。
2. CSS样式选择智能提示加强,键入class="后,能够选择的CSS类用智能感应方式列出来。
3. JavaScript调试加强。VS2005需要先将aspx页面进入调试状态,才能设置JavaScript断点,2008里面可以直接设置好断点后进行调试。另外JavaScript调试时对变量、DOM等运行时的信息查看显示方面,已经基本类似使用C#进行调试的程度。
上面这几个功能,感觉都是仿照Firebug来做的,但还是没有Firebug方便。
Language Features 语言特性
1. Automatic Properties
2. Object Initializer、Collection Initializer、Query Syntax、LINQ扩展方法/lambda表达式
上面的Query Syntax语句等价于下面的LINQ扩展方法、lambda表达式:
先不看将来LINQ to SQL的发展趋势和普及应用状况怎么样,这种函数语言的动态特性,天生就支持很多设计模式,它所具备的灵活性,应该可以用来实现很多精妙的设计。
3. Anonymous Types
例如:
匿名类型在编译时由编译器自动生成一个类名,因此对于Framework而言它与命名类没有任何区别。var的设计目的就是与匿名类型配合使用,同样在编译时刻转换成强类型声明(而不是VB中的那种后帮定),因此编译器必须根据var类型变量的上下文使用环境来判断类型,如果只声明一个var类型的变量而不使用,编译时刻就会报错。
发现一个不恰当的匿名类型使用,会导致Vista蓝屏的现象。
语言特性方面的额外测试
经过测试,Automatic Properties、Object Initializer、Collection Initializer、Query Syntax、Extension Method、lambda Expression、LINQ等这些语言特性可以使用VS2008编译器编译(项目的framework指定为2.0、3.5都可以,如果使用到了Query Syntax、Extension Method、lambda Expression、LINQ,则必须指定为3.5),然后可以在VS2005的项目中正常引用这些dll,使用相关的方法。
Extension Method、 Query Syntax、lambda Expression等,是framework 2.0之后语言特性上的一些新亮点,这些特性值得研究一下。
LINQ to SQL、WPF、WCF、ASP.NET Ajax暂时根本不会在项目中运用。
不满
有点垃圾的感觉
1. 安装时间。我选择安装VS2008的特性已经很少了,安装还花了1个小时。光安装.Net framework 3.5就用了将近半个小时。
2. 空间。VS2008的整体界面、功能操作等,跟VS2005差不多,无外乎就是添加了这么些特性,怎么说也不至于使IDE的框架或者说2005的那一套东西彻头彻尾重换的地步,却又是全新的一套安装包,安装文件3G多,安装后C盘占用1G以上,安装目录所需空间视选择的组件而定。
Framework 3.5的核心还是2.0,只是在上面做扩展;编译器有新的语言特性支持,那编译器升级、换掉就行;IDE有新的功能,但大部分都跟以前一样,有更改的升级更新一下就好了。是商业利益的因素还是VS IDE本身的架构太烂,没有多少扩展性可言?
代码编辑器
1. using语句的组织,可以排序、删除掉没有使用的using。
2. 智能感应窗口透明化。出现智能感应窗口后,按下Ctl键使窗口透明化,例如下面左边的图,智能感应窗口几乎看不到了。
3. 如上面右边的图,在Solution Explorer中,右键菜单可以选择使用Windows Explorer直接打开对应的Windows文件夹,这个功能也是比较方便的,因为经常需要打开目录结构比较深的文件夹,以前老是把当前项目文件夹做一个快捷方式拉到桌面上,现在省了。据说这是VS2008在Vista上的一个特性,不知道在XP里面是否可以。
JavaScript的智能感应
1. JavaScript的智能感应比较符合W3C标准,例如在智能感应里面,document对象没有all属性,window对象没有event属性。
2. 例如JavaScript中,使用document.getElementById("form1"),随后出现的智能感应是html form的属性方法;使用document.getElementById("textbox1")随后出现的智能感应是html textbox的属性和方法。
3. C#中,方法、类可以添加注释说明,在使用的地方,智能感应中能够显示相关注释说明,08中的JavaScript也可以。不过目前的beta版本只支持在独立的.js等文件中定义的函数才支持这种提示,估计是考虑同一个页面中的函数没有必要,而对于第三方的JavaScript库、公共的JavaScript库文件才有意义。如果JQuery等改成VS08支持的这种注释方式,用起来就舒服了。
例如,添加一个JScript.js文件,如下定义一个函数(注释不会像C#一样自动填充出来,需要手写,但书写方式与C#中一样,目前只支持几个主要的注释节点):
function showMessage(msg){
///<summary>显示一条消息</summary>
///<param name="msg">要显示的消息</param>
///<returns>没有返回值</returns>
alert(msg);
}
使用的地方提示如下图:///<summary>显示一条消息</summary>
///<param name="msg">要显示的消息</param>
///<returns>没有返回值</returns>
alert(msg);
}
4. 引入外部JavaScript库的提示。
在aspx文件中,像上面例子使用script标签引用进来就可以。
如果是在自己的JavaScript库中,例如在项目的一个common.js中,需要VS对jQuery、interface函数提供智能感应,只需要在common.js文件开始位置加入下面语句就可以。
/// <reference path="jQuery.js" />
/// <reference path="interface.js" />
/// <reference path="interface.js" />
Web Designer、CSS Property Manager、JavaScript Debuging
1. Web设计器支持代码、设计视图分割显示风格,CSS Property Window能比较直接的查看CSS样式。
2. CSS样式选择智能提示加强,键入class="后,能够选择的CSS类用智能感应方式列出来。
3. JavaScript调试加强。VS2005需要先将aspx页面进入调试状态,才能设置JavaScript断点,2008里面可以直接设置好断点后进行调试。另外JavaScript调试时对变量、DOM等运行时的信息查看显示方面,已经基本类似使用C#进行调试的程度。
上面这几个功能,感觉都是仿照Firebug来做的,但还是没有Firebug方便。
Language Features 语言特性
1. Automatic Properties
public class Book
{
public string Name { get; set; }
public double Price { get; set; }
public string Author { get; set; }
}
{
public string Name { get; set; }
public double Price { get; set; }
public string Author { get; set; }
}
2. Object Initializer、Collection Initializer、Query Syntax、LINQ扩展方法/lambda表达式
//Collection Initializers
IList<Book> books = new List<Book>{
//Object Initializers
new Book{Name="Inside SQL Server", Author="Kalen Delaney", Price=78},
new Book{Name="Domain Driven Design", Author="Eric Evans", Price=56},
new Book{Name="Patterns of Enterprise Application Architecture", Author="Martin Fowler", Price=58}
};
//Query Syntax
Book[] myBooks = (from p in books
where p.Price > 57 && p.Price < 100
orderby p.Price
select p).ToArray<Book>();
foreach (Book book in myBooks)
Console.WriteLine(string.Format("{0}\t{1}\t{2}", book.Author, book.Price.ToString(), book.Name));
Console.ReadLine();
运行结果:IList<Book> books = new List<Book>{
//Object Initializers
new Book{Name="Inside SQL Server", Author="Kalen Delaney", Price=78},
new Book{Name="Domain Driven Design", Author="Eric Evans", Price=56},
new Book{Name="Patterns of Enterprise Application Architecture", Author="Martin Fowler", Price=58}
};
//Query Syntax
Book[] myBooks = (from p in books
where p.Price > 57 && p.Price < 100
orderby p.Price
select p).ToArray<Book>();
foreach (Book book in myBooks)
Console.WriteLine(string.Format("{0}\t{1}\t{2}", book.Author, book.Price.ToString(), book.Name));
Console.ReadLine();
上面的Query Syntax语句等价于下面的LINQ扩展方法、lambda表达式:
Book[] myBooks = (books.Where(p => p.Price > 57 && p.Price < 100).OrderBy(p => p.Price)).ToArray<Book>();
先不看将来LINQ to SQL的发展趋势和普及应用状况怎么样,这种函数语言的动态特性,天生就支持很多设计模式,它所具备的灵活性,应该可以用来实现很多精妙的设计。
3. Anonymous Types
例如:
匿名类型在编译时由编译器自动生成一个类名,因此对于Framework而言它与命名类没有任何区别。var的设计目的就是与匿名类型配合使用,同样在编译时刻转换成强类型声明(而不是VB中的那种后帮定),因此编译器必须根据var类型变量的上下文使用环境来判断类型,如果只声明一个var类型的变量而不使用,编译时刻就会报错。
发现一个不恰当的匿名类型使用,会导致Vista蓝屏的现象。
语言特性方面的额外测试
经过测试,Automatic Properties、Object Initializer、Collection Initializer、Query Syntax、Extension Method、lambda Expression、LINQ等这些语言特性可以使用VS2008编译器编译(项目的framework指定为2.0、3.5都可以,如果使用到了Query Syntax、Extension Method、lambda Expression、LINQ,则必须指定为3.5),然后可以在VS2005的项目中正常引用这些dll,使用相关的方法。
Extension Method、 Query Syntax、lambda Expression等,是framework 2.0之后语言特性上的一些新亮点,这些特性值得研究一下。
LINQ to SQL、WPF、WCF、ASP.NET Ajax暂时根本不会在项目中运用。
不满
有点垃圾的感觉
1. 安装时间。我选择安装VS2008的特性已经很少了,安装还花了1个小时。光安装.Net framework 3.5就用了将近半个小时。
2. 空间。VS2008的整体界面、功能操作等,跟VS2005差不多,无外乎就是添加了这么些特性,怎么说也不至于使IDE的框架或者说2005的那一套东西彻头彻尾重换的地步,却又是全新的一套安装包,安装文件3G多,安装后C盘占用1G以上,安装目录所需空间视选择的组件而定。
Framework 3.5的核心还是2.0,只是在上面做扩展;编译器有新的语言特性支持,那编译器升级、换掉就行;IDE有新的功能,但大部分都跟以前一样,有更改的升级更新一下就好了。是商业利益的因素还是VS IDE本身的架构太烂,没有多少扩展性可言?