回 帖 发 新 帖 刷新版面

主题:[原创]vb2005语言的新特点1

vb2005语言的新特点1

点击数:55    发布日期:2006-1-8 23:27:00   【评论】【打印】【收藏此页到365Key】



  

vb2005有许多新改进的语言特点,这是它成为一种真正面向对象的编程语言;作为一个vb程序员,你现在可以通过声明多线程来创建可升级的多线程应用程序;另外,vb2005还有其他一些特点,值得关注。作为一名vb爱好者,我打算将vb2005语言部分的新特点翻译过来,因为我没有用过vb2005(刚刚下载和安装了vb2005express),只有借助自己对vb6的了解,进行翻译,希望网友们留言,提出建议和批评,QQ:3459028。

特点之一:连续声明(continue statement)

vb现在支持连续声明,这意味着可以从Do、For或while的循环中直接跳到该循环的下一轮反复。语法:Continue { Do | For | While }。

你可以在循环中的任何允许转出的位置使用continue,比如,你可以在一个包含了完整try或finally区块(block)的循环中使用continue,但是如果循环中包含try。。。end try的结构,你不可以从try或finally的区块中转出控制。

如果是相同的类型(type)的嵌套循环,比如一个Do循环中含有其他Do循环,那么continueDo声明就会跳到最里面的Do循环所包含的下一轮反复。你不能够通过使用continue来跳到具有相同类型嵌套循环的下一轮反复上。

如果是不同类型的嵌套循环,比如Do循环中包含一个For循环,你就可以通过使用continueDo或continueFor来跳到任何一个循环的下一轮反复上。

举例:

a。下面的代码使用continueWhile声明,当除数是0时,来跳到数组的下一个列。continueWhile嵌入在一个for循环中,它转出到While col <= lastcol 声明中,这正是包含有for循环的最深层的While循环的下一个反复。

Dim row, col As Integer
Dim lastrow As Integer = 6
Dim lastcol As Integer = 10
Dim a(,) As Double = New Double(lastrow, lastcol) {}
Dim b(7) As Double
row = -1
While row < lastrow
    row += 1
    col = -1
    While col < lastcol
        col += 1
        a(row, col) = 0
        For i As Integer = 0 To b.GetUpperBound(0)
            If b(i) = col Then
                Continue While
            Else
                a(row, col) += (row + b(i)) / (col - b(i))
            End If
        Next i
    End While
End While

b。从一个For。。。Next循环中跳到下一轮反复

1、按正常的方式写出For。。。Next循环

2、在循环的任何地方插入continueFor,从而中止当前反复,继续进行下一轮反复

Public Function findLargestRatio(ByVal high() As Double, _
    ByVal low() As Double) As Double
    Dim ratio As Double
    Dim largestRatio As Double = Double.MinValue
    For counter As Integer = 0 To low.GetUpperBound(0)
        If Math.Abs(low(counter)) < System.Double.Epsilon _
            Then Continue For
        ratio = high(counter) / low(counter)
        If Double.IsInfinity(ratio) OrElse Double.IsNaN(ratio) _
            Then Continue For
        If ratio > largestRatio Then largestRatio = ratio
    Next counter
    Return largestRatio
End Function
这是第一篇,下一篇讲述访问vb6.0窗体(vb6.0  form access)和IsNot运算符(IsNot Operator),简单讲述如何不必定义变量,直接用语言来改变窗体的颜色,以及新的IsNot运算符的使用。希望得到大家的鼓励。


回复列表 (共5个回复)

沙发

vb2005语言的新特点2

点击数:0    发布日期:2006-1-9 20:02:00   【评论】【打印】【收藏此页到365Key】



  

今天接着翻译上次要讲的内容。

二、访问窗体

你可以不通过创建变量就访问vb6的窗体子句(member),下面的例子显示了如何改变窗体的颜色。

要改变窗体1的颜色,需要:

1、确保你的项目(project)和system.drawing命名空间(namespace)关联。这是进行查窗体颜色设置的必要条件。

2、直接在窗体1上改变颜色。

3、直接在窗体1上调用show方法。

Public Sub ChangeForm1Colors()
    Form1.ForeColor = System.Drawing.Color.Coral
    Form1.BackColor = System.Drawing.Color.Cyan
    Form1.Show()
End Sub

如果窗体1不存在,vb会自动创建,你不必为此声明一个变量。

三、IsNot运算符(Operator)

vb2005现在提供了IsNot运算符,可以让你避免麻烦的使用Is和Not运算符。

比较两个对象基准变量(compare two object reference viarables)的代码如下:

result=object1 IsNot object2

其中:result是布尔值;object1和2是对象变量或表达式。

IsNot运算符可判断两个对象是否属于同一类型,但是它不能对数值进行比较。如果两个对象是同一类的,则result的值为false,反之,result的值为true。IsNot运算符和Is运算符恰恰相反,它的优点是避免了Not和is共同组成的苯拙难懂的语句。

下面的代码,分别利用Is运算符和IsNot运算符进行相同的比较,可以看出他们的不同之处:

Dim o1, o2 As Object
If Not o1 Is o2 Then MsgBox("o1 and o2 do not refer to the same instance.")
If o1 IsNot o2 Then MsgBox("o1 and o2 do not refer to the same instance.")

如果你有两个对象变量,你可以用Is或者IsNot或者同时使用两者来判断他们是否同属一种实例(instance)

Public Sub processControl(ByVal f As System.Windows.Forms.Form, _
    ByVal c As System.Windows.Forms.Control)
    Dim active As System.Windows.Forms.Control = f.ActiveControl
    If (active Is Nothing) OrElse (c IsNot active) Then
        Return
    End If
End Sub

这段代码将控件c和活动窗体f上的活动空间进行比较,如果没有活动控件,或者活动控件和控件c不是同一种实例,那么就结束if声明返回。

其实,用IsNot或是用Is完全可以根据个人喜好,二者并无一定的优劣,只要语句意思清晰用哪个都行。

今天就翻译到这里,我真诚期待你的意见和建议。谢谢你访问我的blog。




板凳

四、using 指令(using statement)
    vb 现在提供了using。。。end using区块,当你以任何原因离开该区块时,它可用来保证某个系统资源(system resource)的分配。

举例:
    如果你正在使用的某个系统资源消耗了大量的内存,或者其它部分也等着使用这些资源,你就可以使用using区块来保证当你退出区块时系统进行资源分配。
    在代码结束数据库连接,需要进行资源分配时:
1、确保在你的源码文件开头中包含了合适的输入指令(imports statement)
2、使用using。。。end using创建一个using区块。在区块中放入进行数据库连接的代码。
3、声明连接并创建一个实例,这些作为using区块的一部分。
' Insert the following line at the beginning of your source file.
Imports System.Data.SqlClient
Public Sub AccessSql(ByVal s As String)
    Using sqc As New System.Data.SqlClient.SqlConnection(s)
        MsgBox("Connected with string """ & sqc.ConnectionString & """")
    End Using
End Sub

不管你何时以什么原因退出区块,系统会自动分配资源。
注意,你不能够在using区块外访问sqc,因为他的范围只限于区块内。
你可以将同样技术用在诸如文件处理或com打包的系统资源上。


补充说明:以上内容全部摘自Visual Studio Express Help,有兴趣的朋友可以看看原文(英文),或许更容易理解。

3 楼

五、在一个数组中明确0下标(Explicit Zero Lower Bound on an Array)
举例:
如果你声明了一个数组,你可以通过使用to将数组每一维的下标指定为0。
1、按正常方法声明一个数组
2、在每一维的上标前加上“0 to”
Public Sub declarelowerbounds()
    Dim monthtotal(0 To 11) As Double
    Dim cell(0 To 39, 0 To 19) As Integer
    MsgBox("Total number of elements:" _
        & vbCrLf & "monthtotal (0 To 11) length " & CStr(monthtotal.Length) _
        & vbCrLf & "cell (0 To 39, 0 To 19) length " & CStr(cell.Length))
End Sub
这样下标一定是0,增加了代码的易读性。

4 楼

六、具有混合访问级别的属性(Properties with Mixed Access Levels)
    vb现在允许在get和set进程中声明具有混合访问级别的属性
    如果你想让一个属性的get和set进程有不同访问级别,你可以使用更加宽松的属性指令或者更加严格的get或set指令。当你需要让代码的一部分可以获取属性的值,而其它部分不能改变属性之值时,你就可以用混合访问级别的属性。
    如果要声明一个具有混合访问级别的属性:
1、按正常的方法声明一个属性,并且在属性指令(statement)中指定其限制最小的访问级别(比如public)
2、声明get或set进程,指定限制较大的访问级别(比如friend)
3、在其它属性进程中不指定访问级别。它将采取在属性指令声明中的访问级别。你可以限定只访问属性进程中的一个。
Public Class employee
    Private salaryValue As Double
    Protected Property salary() As Double
        Get
            Return salaryValue
        End Get
        Private Set(ByVal value As Double)
            salaryValue = value
        End Set
    End Property
End Class
在上面的代码中,get进程具有和属性自身相同的protected访问,而set进程只有private访问。来自employee的某个类可以读取salary的值,但是只有employee能够对他进行设定。

5 楼

特点一 不错 刚学vb时就在想 vb为什么不像C那样有continue
现在有了~~不错

我来回复

您尚未登录,请登录后再回复。点此登录或注册