日志标签:VB.NET

Visual Basic 2008中的隐藏特性

时间:2011年12月17日作者:小侃评论次数:0

最近我要写一些大家在以前的博客中没有看到的关于Visual Basic和Visual Studio 2008的新东西,我把它叫做隐藏宝石。我曾提到过在VS2008中的一些特性我很喜欢,还炫耀过智能感知(Intellisense )的改善,尤其是对关键字、本地变量和表达式,自动完成语句的改进。在过去,我还提到过一个新的语法特性,称之为Relaxed Delegates,它允许你为事件(event)提供一个可替代的签名(alternate signatures)。以上这些都是很好的特性,但我今天要说的不是这些,是隐藏宝石(可能这些你在一些C#的文章中见过了,在Visual Basic 2008中一样炫)。

我挑选出了10个最重要的特性,只是简单的介绍一下,有兴趣的可以继续深入研究。
首先,从一个基调特性(keynote feature)开始。

0)多个target Framework支持(Multi-targetting)

简单的说,Multi-targetting支持你在VS2008或VB9下用.NET 2.0 framework进行编译。下面我将要讲到的所有特性都在.NET 2.0下有效,所以当你打开Visual Studio创建一个project以后,把framework target设置为2.0(除了第5和第7项,因为它们需要LINQ到Objects和XML API而LINQ是在.NET 3.5才推出)。如图:

1) 输入推断(Type Inference)

在Visual Basic 9里面,下面的这一小段代码以及Nothing都是延迟绑定(late-bound)——在编译时(compile tine)一切都是延迟绑定,这就意味着你可以得到智能感知和输入推断。

Dim dialog = New OpenFileDialog() Dim result = dialog.ShowDialog() Dim printStr = “C:\” If result = Windows.Forms.DialogResult.OK Then printStr = dialog.FileName End If MsgBox(printStr)

这使得在输入代码时更加快捷,简单和准确。

2) IF操作符

还记得吗,IIF函数能返回一个对象(Object),这意味着你不需要通过智能感知或类型推断就可以得到默认的返回值(Object类型)。如果你坚持要类型安全或代码前绑定,可以强制转换,代码如下:

Dim intC As Integer = CInt(IIf(intA = intB, intA, intB – 1))

现在用IF操作符,你可以这么写:

Dim intD As Integer = If(intA = intB, intA, intB)
如果加上类型推断,代码就更简单了。

3) 对象初始化(Object Initializers)

总的来说,在.net framework里,对象初始化是一种类似于把Dim和statement combined整合在一起的表达式。这样使得参数构造器多少让人容易接受一些:

Dim strm As New StreamWriter( _ New FileStream(“C:\out.txt”,FileMode.OpenOrCreate) _ With {.Position = 10})

对象初始化使得创建一个数组对象更加容易:

Dim Capitals() As City = {New City With {.Name = “Antanarivo”, .Country = “Madagascar”}, _ New City With {.Name = “Belmopan”, .Country = “Belize”}, _ New City With {.Name = “Monaco”, .Country = “Monaco”}, _ New City With {.Country = “Palau”, .Name = “Koror”}}

4) Nullable

Nullable 是一种特性,可能你知道但没有关注过。它是一个基本的.NET 表达式,专门针对nullable类型,主要用于LINQ。Nullable支持你写一段代码,其中的属性以null值传播。例如下面这点代码,在Country type中有个independence property 是nullable date。

Dim virginIslands As New Country With {.Independence = Nothing} Dim palau As New Country With {.Independence = #10/1/1994#} Dim vILength = #8/24/2005# – virginIslands.Independence ‘ Nothing Dim pLength = #8/24/2005# – palau.Independence ‘ 3980.00:00:00

5) LINQ to DataSet

它意味着你可以不用调用其他数据访问技术就能收获LINQ的好处。先填充一个DataSet,然后就可以对这个DataSet进行查询。

Me.EmployeesTableAdapter.Fill(Me.NORTHWNDDataSet.Employees) Dim query = From emp In Me.NORTHWNDDataSet.Employees _ Where emp.Country = “USA” _ Order By emp.HireDate _ Select emp Me.EmployeesBindingSource.DataSource = query

当namespace被用在XML 文档中时,智能感知会对namespace前缀和local name进行匹配,你只要为输入带来很大便捷,你只要输入开头几个字母然后回车,VS会帮你找到匹配的字段并加上相应的前后缀。下面是个小例子,以一个输入文件开始,然后使用智能感知。

此时我们只输入字母t,VS会自动选中tomato。

8) GoTo Type Definition

通常,当你定义了一个变量,你想通过Object Browser浏览它在代码中的类型定义的时候,现在你多了一种选择,通过context menu可以让你直接找到它的定义。这点非常好,尤其是涉及到类型推断时能帮你确定该变量的类型是否和你想象的一致。

9) 循环变量的输入推断(Type inference for loop variables)

如果没有指定控制变量的类型,它会根据表达式或循环的信息从右往左推断。

10) 性能的提高以及非封闭性操作

后台编译器有一个非常强大的特性,它可以给你及时地反馈只要你写的代码正确。在这个版本的Visual Studio中我们对后台编译器做了很大的改进,我们相信后台编译器比以前快3倍但只用原先1/3的内存。任何使用过VS2008的人都会意识到这一点。虽然我们在性能上做了很大的改进,但是在大项目里面某些操作符仍然是一个巨大的花费,例如改变一个base class的declaration 通常会被多次用到。如果在后台编译器工作之前,你试图调用一些依赖于编译信息的特性(例如Intellisense或Drop Downs),在以前版本的VS中会有一个长时间的停顿直到编译完成为止,但是现在这个问题解决了,当你想得到drop downs的时候就像这样,VS很快会有响应。

 

 

用VB.NET读写XML文件

时间:2011年12月17日作者:小侃评论次数:0

如今,在互联网中XML得到了广泛的应用,XML文件的读写已经成为网络编程中必不可少的一部分。下面的实例是用VB.NET对XML文件的读写,我们使用DataSet类来完成这项任务。
DataSet对象在传输时,是以XML流的形式而不是以COM形式传输的。DataSet对象可以读取XML数据文件或者数据流,从而将树型结构的XML数据转换成关系型的数据,如表(DataTable)、列(DataColumn)、行(DataRow)等。
在这个实例中,我们将XML文件命名为“xmlfile.xml”,具体内容如下:

    <?xml version="1.0"standalone=”yes”?> 
    <Detail> 
    <Person> 
    <Name>Manish</Name> 
    <Age>22</Age> 
    </Person> 
    </Detail>

   '用VB.NET读写XML文件
    C1aSS WriteXML
    Shared Sub main()
    Dim obj DataSet As New System.Data.DataSet()
    Dim strVirtualPath As String=”t.xml”
    '载入XML文件DataSet
    objDataSet.ReadXml(”xmlfile.xml”)
    '通过控制器读取XML内容
    Console.Write(objDataSet.GetXml)
    '从原XML文件中得到数据
    ConSOle.Write(”Enter Name:”)
    Dim fname,age As String
    fname=ConS01e.ReadLine
    '写入你希望的代码
    ConS01e.Write(”Enter Age:”)
    age=Console.ReadLine
    ConS0le.Write(fname&age)
    Dim v(1)As String
    v(0)=fname
    V(1)=age
    '增加数据DataSet
    objDataSet.Tables(0).Rows.Add(V)
    '更新XML文件
    objDataSet.WriteXml(”xmlfile.xml”)
    Console.Write(obj DataSet.GetXml)
    End Sub
    End C1ass

运行该程序有两种方式,一种是在Microso~VS.NET框架中编译完后运行;另一种则是在仿DOS的Command窗口中运行。在第一种方式中,必须加上System、System.Data、System.xML的引用。具体方法为:先创建一个空的项目,然后加入这个文件名字;在“解决方案资源管理器”中加入引用,此时需要选择相应的.dll文件;注意,xmlfile.xml文件应该放在工程的/bin目录下面。我们可以输出结果也可以用浏览器直接查看改变后的XML文件。在第二种方式中,选择桌面的“程序”一“Microso~Visual Studio.NET”一“VisualStudio.NET工具”一“Visual Studio.NET命令提示”命令,在DOS命令提示框敲入命令: